Как предотвратить атаки методом перебора при отправке формы AJAX? - PullRequest
2 голосов
/ 27 ноября 2010

Предположим, у меня есть файл login.php.

login.php принимает параметры get (или post) имени пользователя и пароля и возвращает true, если вход выполнен успешно, и false в противном случае.Таким образом, другие страницы могут получить к нему доступ через ajax.

Мой вопрос таков: поскольку этот метод уязвим для атак методом перебора, как мне это обезопасить?Я подумываю о том, чтобы запретить ему доступ, если это не из формы моего собственного сайта, но как бы вы поступили так?

Я использую jquery для выполнения вызовов ajax.

Ответы [ 3 ]

1 голос
/ 27 ноября 2010

после 3 запросов с одного и того же IP-адреса просто задерживайте каждый ответ от вашего сервера на 2 секунды.

Не используйте сеансы или какой-либо механизм на стороне клиента.Просто используйте временную таблицу для запроса входа в систему, в которой хранятся IP-адрес и номер или неудачная авторизация, которую вы используете для увеличения своего времени.После 15 минут без попытки авторизации с ip, очистите его запись.

С этим, брут-сила может быть "немного" хитрой для плохого парня, может быть, у него есть несколько лет для попытки доступа к вашему сайту)и это сохраняет удобство использования для дислексиков, таких как я, которым может понадобиться повторно ввести свой пароль 4 или 5 раз, прежде чем хороший без ошибок ^^

1 голос
/ 27 ноября 2010

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

Невозможно добиться этого надежно,Вы можете использовать своего рода captcha , настроить запросы, настроить брандмауэр так, чтобы он отбрасывал несколько последовательных запросов с одного и того же IP-адреса, что усложнит задачу атакующего.

0 голосов
/ 27 ноября 2010

Грубая сила намного сложнее, чем вы думаете. Если человек использует плохой пароль, это его проблема. Даже слабый пароль (8 символов) потребует 2 года перебора, если злоумышленники могут делать миллион попыток каждую секунду. У вас есть много вариантов:

  1. Ограничить количество попыток входа в систему на имя пользователя за пять минут. Это требует таблицы в вашей базе данных, где вы храните запросы и их время в течение последних 5 минут, более или менее. Это имеет неприятный побочный эффект: кто-то может (D) делать DoS одному из ваших пользователей.
  2. Ограничение количества попыток глобального входа в систему ... Это проще, но может упростить DDoS для всего вашего сервера. Я бы не стал это делать.
  3. Ограничить количество попыток с IP или с IP / пользователя. Это не допустит простой DDoS, но не остановит атаку распределенной грубой силы, так что не беспокойтесь.

Я бы сделал следующее: Требовать пароли из 10 или более символов. Кричите, если они недостаточно сильны или основаны на словарных словах (но все же позволяют им). Регистрируйтесь, когда слишком много запросов на вход в систему, и проводите персональные расследования как можно скорее.

Все это происходит на стороне сервера и не имеет ничего общего с AJAX.

...