ASP.NET PageMethods и JQuery AJAX Post & # 8211; Насколько это действительно безопасно?

StackOverflow https://stackoverflow.com/questions/812945

Вопрос

У меня следующий сценарий & # 8211; и что я действительно ищу, так это реальную помощь от реальных людей. Предложения / Решения? Пожалуйста.

У меня есть экстранет-сайт для бывших www.foo.com (asp.net 3.5) Я использую JQuery 1.3.2 для вызова ValidateLogin PageMethods на странице default.aspx (www.foo.com/default.aspx)

Код будет выглядеть так

$.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "Default.aspx/ValidateLogin",
            data: '{' + arg + '}',
            success: function(data) {
                if (data.d != 0) {
                    window.location = "http://www.google.com";
                } else {
                    alert("Invalid UserName/Password.");
                    ResetLoginForm();
                }
            },
            error: function(xhr, status, error) {
                var strerror = xhr.status + error;
                alert("Error Communicating with Server:" + strerror);
                ResetLoginForm();
            }
        });

Код хранится во внешнем js-файле. Для ex default.js.

Поскольку этот сайт является общедоступным, любой может загрузить файл default.js и, таким образом, взглянуть на приведенный выше код.

У меня вопрос, как только человек получит этот URL: " Default.aspx / ValidateLogin " ;, он может сделать запрос к серверу, и сервер с гордостью ответит на запрос.

Какие у меня есть варианты? как проверить запрос? Как предотвратить подобные несанкционированные запросы?

Это было полезно?

Решение

Веб-запросы по своей природе являются общедоступными. Им даже не нужно смотреть на исходный файл. Они могут просто отслеживать HTTP-запросы и воспроизводить их (это очень просто с помощью такого инструмента, как, например, fiddler).

Проблема с дросселированием

Решения по регулированию на самом деле нежизнеспособны, хотя они снижают частоту атак. Проблема в том, что злоумышленник может написать сценарий, который выполняется в течение нескольких дней. Опять же, он может использовать прокси для отправки параллельных запросов. И если вы дросселируете для каждого имени пользователя, то противник может достичь DoS, пытаясь ввести ложный вход на допустимые имена пользователей, и когда фактический пользователь пытается войти в систему, он не будет знать, почему он заблокирован.

Решение

Типичный подход заключается в использовании одноразовых ключей. Это потребует некоторой дополнительной работы, но это уменьшит проблему, и это рекомендуется, только если вы действительно ожидаете нападения или что-то в этом роде. Упрощенная версия этого позволит клиенту передавать одноразовый ключ в качестве параметра запроса URI. Ключ выдается сервером клиенту в первую очередь. Как только запрос сделан, сервер проверяет, существует ли одноразовый ключ в базе данных, и разрешает запросы. Он немедленно удаляет одноразовый ключ, поэтому пользователь не может сделать еще один запрос с тем же одноразовым ключом, но тогда серверу потребуется выдать больше одноразовых ключей пользователю.

Упрощенное решение состоит в том, чтобы разрешать только аутентифицированным пользователям отправлять запросы веб-служб, но поскольку вы разрабатываете систему входа в систему, это, очевидно, не прилипает.

Я бы не волновался об этом, если у тебя нет противных противников.

Другие советы

Я предполагаю, что вы раскрыли, что ваш метод Page загружает сеанс, поэтому я думаю, что вы можете установить переменную сеанса при загрузке страницы, а затем проверить, существует ли она при вызове метода страницы. Это не самая безопасная вещь в мире, но это поможет.

Лично я не стал бы пытаться сделать его более безопасным - как уже говорили другие, веб-сервисы по своей природе общедоступны.

Я бы сказал, что нет проблем; Тем не менее, вы, вероятно, захотите сделать ограничение скорости , чтобы люди не могли попробовать грубое принуждение.

Вы также можете поставить капчу после, скажем, 2-3 неудачных попыток входа в систему, что позволит избежать перебора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top