Контрольный вопрос Ajax: динамическое предоставление доступных имен пользователей

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

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

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

некоторые связанные вопросы: 1, 2


person Andrew Harry    schedule 30.06.2009    source источник
comment
Справедливо ли сказать, что раскрытие этой информации независимо от методов безопасности, кто-то решил получить имена пользователей, злоупотребляя этим методом, в конечном итоге их получит?   -  person Andrew Harry    schedule 30.06.2009


Ответы (5)


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

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

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

person UnkwnTech    schedule 30.06.2009
comment
Это тоже была моя первая мысль. токен безопасности - person Andrew Harry; 30.06.2009
comment
По моему опыту, это самый эффективный способ, и он не будет беспокоить пользователей. - person UnkwnTech; 30.06.2009
comment
это просто не работает! Хакер может воспроизвести токен безопасности, если вы не используете какое-либо решение для базы данных. - person VP.; 24.12.2009
comment
В.П. есть предположение, которое я не указал в посте, нужно сверять время, с текущим временем. - person UnkwnTech; 25.12.2009

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

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

person Jason    schedule 30.06.2009
comment
Я рассматривал «токен» безопасности, который должен быть в запросе, токен подходит для xx запросов. - person Andrew Harry; 30.06.2009
comment
Возможно, лучше ограничить количество запросов на один IP-адрес. - person Andrew Harry; 30.06.2009
comment
вы можете пройти через весь беспорядок с токенами, хэшированием и еще чем-то, но я лично считаю, что ограничение запросов по IP-адресу проще и столь же эффективно, особенно если вам не требуется безопасность на уровне предприятия. - person Jason; 30.06.2009
comment
@jason Я недавно пытался зарегистрироваться на веб-сайте и в течение одной минуты просмотрел около 15 имен, ни одно из которых не было действительным, я не думаю, что ограничение IP-адресов того стоит, либо пользователи будут разочарованы, если они не смогут найти имя и не могу продолжать попытки, хэширование простое и эффективное, если предположить, что они не знают вашей соли, они не могут проверить имена, не находясь на вашем веб-сайте. - person UnkwnTech; 30.06.2009
comment
@unkwntech - если вы реальный человек, вы, вероятно, все равно не сможете проверять более 2 имен каждые 10 секунд. если вы компьютер, вы можете отправить сотни запросов за одну секунду. если вы действительно хотите мудрить, сделайте 3 запроса за 10 секунд. - person Jason; 30.06.2009

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

person SeanJA    schedule 30.06.2009

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

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

person msingleton    schedule 30.06.2009

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

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

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

person Cais Manai    schedule 11.05.2012