Предотвращение грубой силы/DOS в PHP

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

18
задан nickf 13 November 2009 в 05:37
поделиться

3 ответа

Я бы посоветовал, если пользователь безуспешно пытался, скажем, более пяти раз и пяти минут, вы немедленно начали возвращать 503 Service Unavailable для этого IP-адреса. В случае сбоя входа в систему вы можете использовать memcache для получения текущих неудачных попыток для IP, а затем увеличить количество и сохранить его обратно в memcache с истечением 5 минут.

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

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

13
ответ дан 30 November 2019 в 07:33
поделиться

Я не уверен, что лучше всего использовать, но при борьбе с DoS-атаками лучше всего направить трафик прочь от вашего сервера. Установка тайм-аутов на самом деле не поможет, потому что вы все еще обрабатываете запрос и используете PHP.

Рассматривали ли вы установку другого веб-сервера, на котором будет запущена более простая урезанная версия вашей страницы входа? Когда пользователь пытается слишком много раз (например, тысячи раз), отправьте сообщение, чтобы настроить маршрутизатор и перенаправить этого пользователя на второй веб-сервер.

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

1
ответ дан 30 November 2019 в 07:33
поделиться

Я использовал что-то вроде этого ...

  1. Проверить имя пользователя и пароль

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

    1.2 Каждый сбой увеличивает время ожидания между возможностью входа в систему, например, failsCount *, от 30 секунд до максимального (например, 10 минут).

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

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

4
ответ дан 30 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: