Альтернативная CAPTCHA. Как сократить поток спама.

Проблема распространения СПАМа в Интернет не нова. СПАМ помогает многим компаниям повысить продажи, а так же служит одним из методов размещения ссылки на стороннем ресурсе в целях поискового продвижения. СПАМ-роботы программируются, как правило, на поиск html-форм на странице, заполнении их заранее предопределенными значениями и отправку результатов.

Стандартным и наиболее привычным средством защиты от СПАМ-роботов является так называемая графическая CAPTCHA (от англ. «Completely Automated Public Turing test to tell Computers and Humans Apart»). Но в последнее время технологии распознавания графических изображений (равно как и альтернативные способы распознавания CAPTCHA) шагнули далеко вперед, поэтому графическая CAPTCHA уже не является достаточно надежным средством защиты. К тому же усложнение CAPTCHA, как правило, связанно с уменьшением читабельности символов на картинке. Подобный негативный эффект плохо сказывается на количестве заполнений форм и на usability как отдельной страницы, так и сайта.

Для решения этой проблемы используются не графические CAPTCHA. Их разновидностей очень много: аудио (пользователю предлагается ввести проигранный текст), логические (пользователю предлагается решить простенький математический пример), анимационные (пользователю предлагается пройти flash-лабиринт, не задев ни одной стенки) и т.п. Альтернативой этим методам может служить метод скрытого поля.

Метод скрытого поля базируется на алгоритме 99% СПАМ-роботов, а именно на том, что робот заполняет ВСЕ поля в web-форме. Для применения метода необходимо создать в содержимом тега form контейнер со свойством display:none. Желательно, чтобы свойство display:none было прописано в CSS. В невидимом контейнере надо разместить поле ввода текста и предупреждение о том, что для корректной работы формы это поле заполнять не следует.

Вся html-конструкция будет примерно следующей:

[sourcecode lang="html"]


Не заполняйте это поле!
[/sourcecode]

Далее при обработке формы необходимо проверить условие заполненности поля parametr. Если оно заполнено, то присланные значения можно считать СПАМом.

Алгоритм можно усложнить например так:

Java скриптом можно создавать в структуре html невидимое поле input с введенным значением. В noscript поместить вопрос и текстовое поле, в которое надо написать ответ, который заполняется скриптом. И на стороне сервера проверять это поле на наличие правильного ответа

На примере это будет выглядеть примерно так. Создается javascript, который дополняет форму элементом со значением 5. В noscript задан вопрос: «сколько будет один плюс четыре?» и поле ввода ответа с тем же именем. Далее на стороне сервера проверяется переданное значение, и если оно не равно 5 (или «пять», «five»), то результат формы не принимается.

Усложненный вариант этого принципа справляется с задачей отсеивания спама значительно лучше.

Реализация этого метода, так же как и обработка формы для каждой CMS, различна.