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

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

Вопрос

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

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

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

некоторые сопутствующие вопросы: 1, 2

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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