Ajax Security Question: предоставление доступных имен пользователей динамически - PullRequest
1 голос
/ 30 июня 2009

Я разрабатываю простую форму регистрации в ASP.net MVC 1.0 Я хочу, чтобы имя пользователя проверялось, пока пользователь печатает (согласно связанным вопросам, указанным ниже)

Это все достаточно просто. Но каковы последствия для безопасности такой функции?

Как мне избежать злоупотреблений со стороны людей, которые проверяют это, чтобы определить список действительных имен пользователей? некоторые связанные вопросы: 1 , 2

Ответы [ 5 ]

3 голосов
/ 30 июня 2009

Чтобы не допустить «злонамеренных» действий с некоторыми внутренними компонентами Ajax, я добавляю две переменные GET, одна - это дата (обычно в эпоху), затем я беру эту дату, добавляю соль и SHA1, а также публикую ее, если дата (при перефразировании) не соответствует хешу, тогда я отбрасываю запрос, в противном случае выполняю его.

Конечно, я выполняю шифрование перед отображением страницы и передаю хэш и дату JS. Иначе это было бы бессмысленно.

Проблема с использованием ограничений на основе IP / cookie заключается в том, что оба они могут быть обойдены. Используя маркерный метод с хорошей, криптографически стойкой солью (скажем, что-то вроде «Совершенных паролей» Стива Гибсона https://www.grc.com/passwords.htm), потребуется ОГРОМНОЕ количество времени (в масштабе десятилетий), прежде чем метод сможет надежно предсказуемо и обеспечивает определенный уровень безопасности.

0 голосов
/ 11 мая 2012

На основе ответа, предоставленного UnkwnTech, это довольно солидный совет.

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

Добавленная арифметика означает, что нестандартный сценарий очистки имени пользователя вряд ли сработает и вынуждает клиента использовать больший процессор.

0 голосов
/ 30 июня 2009

Один из распространенных способов решить эту проблему - просто добавить задержку в запросе. Если запрос отправлен на сервер, подождите 1 (или более) секунд, чтобы ответить, затем ответьте с результатом (если имя является действительным или нет).

Добавление временного барьера на самом деле не влияет на пользователей, которые не пытаются очистить, и вы получили 60 запросов в минуту бесплатно.

0 голосов
/ 30 июня 2009

Подтверждено как в: «Это имя пользователя уже занято»? Если вы ограничиваете количество запросов в секунду, это должно помочь

0 голосов
/ 30 июня 2009

Вы можете ограничить количество запросов, возможно, до 2 на 10 секунд или около того (реальный пользователь может ввести имя, которое будет взято, изменить его и попробовать еще раз). вроде как SO не позволяет вам комментировать чаще, чем раз в 30 секунд.

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

...