Предотвратить отправку формы спам-ботами

Мне нужен совет, как лучше всего предотвратить отправку формы спам-ботом. Я провел некоторое исследование и придумал код ниже.

Механизм такой: HTML-код просит пользователя ввести число, и если введенное число равно 50, то jQuery возвращает true и форма отправляется. Если значение отличается от 50, форма не отправляется. Код работает, если пользователь заполняет форму, однако боты продолжают рассылать спам.

У меня такой вопрос - Боты просто обходят код jQuery и отправляют форму прямо на сервер или это невозможно и они как-то догадываются, что в поле нужно ввести 50?

Я хотел бы получить экспертное мнение по этому поводу, чтобы решить, следует ли мне потратить больше времени на улучшение текущего кода (возможно, скрыть поле и установить для него значение по умолчанию) или я должен придумать совершенно другое решение.

Спасибо вам всем!

$("#RegFrm").submit(function(){
         if ($('#samp').val() != 50) {

             return false;
         }
         else {

             return true;
         }
  })

person BradG    schedule 02.07.2014    source источник
comment
Ну, большинство ботов не выполняют JavaScript. Я бы проверил переданное значение на стороне сервера.   -  person undefined    schedule 02.07.2014
comment
Боты могут напрямую отправлять форму. Кроме того... число 50 находится прямо здесь, в javascript... так что программисту бота достаточно прочитать его один раз. Решение должно включать проверку на стороне сервера. Пользуйтесь сервисами-капчами и т. д.   -  person Nawed Khan    schedule 02.07.2014
comment
На самом деле, я использую вторую проверку на стороне сервера. Я использую механизм проверки, который проверяет, равно ли значение в поле samp значению в другом скрытом поле, для которого я установил значение по умолчанию value="50" (то же решение проверяет, совпадают ли два поля пароля, и тот же механизм проверяет наличие обязательных полей). Затем, если значение в samp равно 50, все в порядке, если пользователь не увидит сообщение, число неверно. Однако я думаю, что это только проверяет поле и не позволяет пользователю отправлять форму - я не уверен, может ли он также остановить бота, поэтому я реализовал решение javascript.   -  person BradG    schedule 02.07.2014


Ответы (1)


Есть две категории ботов, к которым вам нужно подготовиться: тупые и браузерные безголовые.

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

Безголовые спам-боты на основе браузера так же умны, как ваш обычный веб-браузер (обычно они основаны на WebKit или Gecko), и они будут запускать JavaScript. Теоретически они все еще могут обойти ваш вызов JavaScript, удалив ваш обработчик события submit() (обратите внимание, что это предположение, я не знаю, делают ли они это регулярно, хотя имело бы смысл отключить проверку таким образом).

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

person PeterK    schedule 07.07.2014