Как предотвратить атаки методом перебора при отправке формы Ajax?

Допустим, у меня есть файл login.php.

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

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

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


person kamikaze_pilot    schedule 27.11.2010    source источник
comment
Как бы вы справились с атаками методом грубой силы на обычную страницу php? Нет ничего другого.   -  person epascarello    schedule 27.11.2010


Ответы (3)


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

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

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

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

person Rosh Oxymoron    schedule 27.11.2010
comment
If a person is using a bad password, it's their problem: Не совсем так: взлом ВАШЕГО сервера из-за того, что один из ваших пользователей использует недельный пароль, является вашей проблемой, как и проблемой всех остальных пользователей ... - person Pascal Qyy; 27.11.2010

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

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

person Darin Dimitrov    schedule 27.11.2010
comment
что, если хакер попадет с нескольких (10 000+) IP-адресов? - person whoami; 24.03.2017

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

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

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

person Pascal Qyy    schedule 27.11.2010