Как именно «анализ временных меток» удерживает спам? - PullRequest
2 голосов
/ 23 апреля 2011

В этой статье о том, сколько CAPTCHA отстой упоминает, что Animoto использовал анализ временных меток, чтобы сократить спам.

Включает ссылку на jQuery-учебник о временной отметкеанализ.По сути, вы используете AJAX, чтобы PHP устанавливал cookie, JS добавляет скрытый ввод в форму, а затем (при отправке) сравниваете скрытое значение ввода со значением cookie.Из руководства:

Проверка формы

test.php - это пример кода PHP, используемого для проверки токена

  • Является ли токен [скрытый вводзначение] присутствует?
  • Соответствует ли оно метке времени при запуске через функцию md5 ()?
  • Слишком много времени прошло?

...Но мне это показалось очень запутанным по следующим причинам:

  • Токен присутствует? Токен добавляется только JavaScript, поэтому все, что вы на самом деле делаете, этообнаружение, включен ли JS.Конечно, есть более простые способы сделать это.
  • Соответствует ли оно метке времени при запуске через функцию md5 ()? md5 может заставить нас чувствовать себя лучше, но это не простоуверены, что куки включены?Конечно, есть более простые способы сделать это.
  • Слишком много времени прошло? Действительно ли спам-боты занимают много времени для отправки форм?Конечно, это не нужно.(Разве вы не хотели бы видеть, была ли форма отправлена ​​ слишком в ближайшее время?)

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

1 Ответ

3 голосов
/ 23 апреля 2011
  • Имеется ли токен? Да, вы в значительной степени видите, включен ли JavaScript в клиенте. Но дело в том, что многие фреймворки веб-автоматизации не поддерживают JavaScript (или поддерживают только его ограниченное подмножество), а те, которые имеют надлежащую поддержку JavaScript, имеют тенденцию быть довольно тяжелыми и поэтому не подходят для использования в качестве спама. бот. Таким образом, в основном вы отфильтровываете простых спам-ботов, которые полагаются на публикацию формы по URL, фактически не оценивая что-либо на странице, содержащей форму.

Следующие два пункта, похоже, больше защищают от кеширования спам-ботом и повторного использования отправки формы, чем от отправки данной формы, которая занимает слишком много времени после загрузки страницы с сервера. Как вы говорите, можно ожидать, что спам-бот будет на быстрее , чем реальный пользователь при отправке формы, при условии, что спам-бот выполняет процедуру запроса формы с вашего сервера, а затем отправляет ответ назад. Но не все спам-боты будут следовать этому потоку. Некоторые могут кэшировать страницу, которую отправляет ваш сервер (или ответ, сгенерированный для этой страницы) для повторного использования снова и снова. Если они это сделали, то временные метки / куки дают вам возможность обнаружить это.

Но я действительно думаю, что временные метки не нужны. Я бы придерживался только токена + JavaScript, используя подход, примерно такой:

  1. Каждый раз, когда запрашивается страница / форма, сервер генерирует новый случайный токен для этого запроса.
  2. Маркер связан с текущим сеансом HTTP пользователя.
  3. Токен (или его слегка зашифрованная версия) также отправляется на страницу.
  4. JavaScript добавляет значение токена в качестве скрытого ввода в форму (сначала расшифровывает его, если необходимо).
  5. При отправке сервер проверяет, существует ли a) токен в сеансе HTTP пользователя, b) токен был отправлен с формой и c) совпадают оба токена.
  6. Предполагая, что отправка была действительной, сервер очищает токен от сеанса HTTP пользователя, чтобы его нельзя было повторно использовать.

Так что всякая бессмысленная бессмысленная временная метка исчезнет, ​​потому что она встроена в сеанс HTTP. Срок действия очень старых сессий истекает, и они забирают свои жетоны. Вы по-прежнему отфильтровываете спам-ботов, которые недостаточно развиты для поддержки JavaScript или файлов cookie, и вы отказываетесь от использования отправленных в кэше URL-адресов / форм, поскольку шаг 6 гарантирует, что ни один токен не может быть использован более одного раза. По сути, спам-бот вынужден пройти через весь цикл запроса страницы с вашего сервера, выполнения JavaScript и отправки формы для каждой отправки, которую он хочет сделать.

...