Отслеживание и тестирование для оскорбительных клиентов в PHP - PullRequest
3 голосов
/ 30 октября 2009

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

Я занимаюсь разработкой сайта, который заменит существующий. Исторически одной из проблем, с которыми мы сталкивались, являются боты-пауки, которые засыпали весь контент. Теперь мы не против того, что контент загружается. На самом деле, мы рады этому, однако некоторые загрузчики и ускорители загрузки оказались проблемными с текущим сайтом.

То, что я ищу, это что-то, чтобы сидеть в начале моего php, который запускается в основном первым. Он берет отпечаток запроса страницы (ip, реферер, uri запроса, куки, идентификатор сеанса и т. Д.) И передает его ... чему-то. Это что-то сравнивает отпечаток пальца с отпечатками пальцев в последнюю секунду или три. Затем он возвращает сообщение на основе некоторого предварительно настроенного порога, что делать с запросом.

Некоторые пороги:

  • Пользователь запросил> x страниц за последние 0.n секунд.
  • Пользователь запросил ту же страницу за <0.n секунд. </li>
  • Пользователь отправил идентичные данные в форму за последние n секунд.

Итак, вы видите, что я смотрю на довольно узкие окна. Возможно ли обнаружить такие вещи? Смогу ли я сделать это с каким-либо источником данных в виде файла или базы данных? Все, что я использую для хранения отпечатков пальцев между загрузками страниц, будет испытывать значительный отток, поскольку большая часть данных будет храниться в течение одной или двух секунд. Должен ли я иметь что-то, что анализирует логи apache для проверки на порог? Должен ли я искать какой-то внешний демон, который на секунду или две хранит в памяти данные, которые я могу вызвать из скрипта? Есть ли в apache что-то, что может с этим справиться, и мне просто нужно откинуться на сервер, чтобы справиться с этим?

Предполагая, что это то, что я могу сделать в PHP или что-то вроде внешнего демона, как мне реагировать на поведение вне пределов? Моя интуиция говорит HTTP-ответы, что-то вроде 408 или 503, но моя интуиция часто ошибочна. Что я могу сделать, чтобы сказать клиенту немного отступить? Какая-то страница "Woah there"?

Ответы [ 3 ]

3 голосов
/ 31 октября 2009

Если у вас нет для программного решения, почему бы не запрограммировать ваш роутер / брандмауэр, чтобы он справился с этим для вас? Фильтрация DOS-атак (или их эквивалента) является частью того, для чего они предназначены.

2 голосов
/ 31 октября 2009
2 голосов
/ 31 октября 2009

Попробуйте mod_evasive

...