- Имеется ли токен? Да, вы в значительной степени видите, включен ли JavaScript в клиенте. Но дело в том, что многие фреймворки веб-автоматизации не поддерживают JavaScript (или поддерживают только его ограниченное подмножество), а те, которые имеют надлежащую поддержку JavaScript, имеют тенденцию быть довольно тяжелыми и поэтому не подходят для использования в качестве спама. бот. Таким образом, в основном вы отфильтровываете простых спам-ботов, которые полагаются на публикацию формы по URL, фактически не оценивая что-либо на странице, содержащей форму.
Следующие два пункта, похоже, больше защищают от кеширования спам-ботом и повторного использования отправки формы, чем от отправки данной формы, которая занимает слишком много времени после загрузки страницы с сервера. Как вы говорите, можно ожидать, что спам-бот будет на быстрее , чем реальный пользователь при отправке формы, при условии, что спам-бот выполняет процедуру запроса формы с вашего сервера, а затем отправляет ответ назад. Но не все спам-боты будут следовать этому потоку. Некоторые могут кэшировать страницу, которую отправляет ваш сервер (или ответ, сгенерированный для этой страницы) для повторного использования снова и снова. Если они это сделали, то временные метки / куки дают вам возможность обнаружить это.
Но я действительно думаю, что временные метки не нужны. Я бы придерживался только токена + JavaScript, используя подход, примерно такой:
- Каждый раз, когда запрашивается страница / форма, сервер генерирует новый случайный токен для этого запроса.
- Маркер связан с текущим сеансом HTTP пользователя.
- Токен (или его слегка зашифрованная версия) также отправляется на страницу.
- JavaScript добавляет значение токена в качестве скрытого ввода в форму (сначала расшифровывает его, если необходимо).
- При отправке сервер проверяет, существует ли a) токен в сеансе HTTP пользователя, b) токен был отправлен с формой и c) совпадают оба токена.
- Предполагая, что отправка была действительной, сервер очищает токен от сеанса HTTP пользователя, чтобы его нельзя было повторно использовать.
Так что всякая бессмысленная бессмысленная временная метка исчезнет, потому что она встроена в сеанс HTTP. Срок действия очень старых сессий истекает, и они забирают свои жетоны. Вы по-прежнему отфильтровываете спам-ботов, которые недостаточно развиты для поддержки JavaScript или файлов cookie, и вы отказываетесь от использования отправленных в кэше URL-адресов / форм, поскольку шаг 6 гарантирует, что ни один токен не может быть использован более одного раза. По сути, спам-бот вынужден пройти через весь цикл запроса страницы с вашего сервера, выполнения JavaScript и отправки формы для каждой отправки, которую он хочет сделать.