Отслеживание и тестирование недобросовестных клиентов в PHP

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

Вопрос

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

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

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

Некоторые пороговые значения являются:

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

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

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

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

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

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

Попробуйте mod_evasive

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