Критика критиков

Сетти критикует предложение одного западного блоггера защищаться от спама с помощью CSS:

Damien Katz предложил бороться со спамом при помощи CSS. Для этого, говорит он, нужно использовать поле ввода email, скрытое от пользотателя средствами CSS. Когда человек заполнит форму, скрытое поле он заполнить не сможет, оно будет пустое. Но, если форму заполнит бот, он вставит в это поле какой-нибудь текст(он ведь не узнает, что это поле скрыто) и засабмитит её.

А почему CSS? Почему не Javascript, например? C помощью JS можно придумать антиспам штук больше чем всего ботов существует. Например, можно динамически создавать форму при помощи JS — тогда в оригинальном документа формы вообще не будет — она появится после того, как загрузится документ. Еще метод с JS — таймер, но он не попадает ни в какое сравнение с серверным таймером, когда вычисляется время между моментом выдачи документа и моментом отправки формы ((С) SpamKarma) — ясно, что бот делает все оочень быстро и его легко вычислить. Много методов я могу придумать просто болтая с любым из вас прямо сдесь и все они в 99,9% случаев будут рабочими (универсального механизма еще не придумали). То, что предложил автор — больше чем чушь. Простой и самый актуальный пример — блоги. Бот знает все поля, которые есть, которые вводить обязательно и которые вводить не обязательно. Бот заполнит name, e-mail и URL, а на скрытое поле даже не посмотрит. Куда более эффективнее в защите блогов простое переименование полей формы и тогда, если запретить трекбеки во всех записях, антиспам-плагины можно удалять (проверено).

Проблема тут только в том, что ни западный блоггер, ни Сетти не имеют представления о том, как работают спамботы. Из описания способов защиты рисуется некая зловещая программа, которая куда-то приходит, вбивает текст в форму, жмет на кнопку «Отправить» и вообще всячески маскируется под человека.
В действительности все гораздо проще. Одна часть спамбота вылавливает установленные на сайтах формы. Затем эта форма вносится в некую базу — на этом этапе форму может посмотреть человек и определить список обязательных полей. После чего спамбот начинает работать — без всяких посещений страниц, зачем? Делается прямой POST (или GET) запрос к обработчику формы, в котором передаются значения всех обязательных и желательных (например, адрес сайта редко бывает обязательным) полей. Все, собственно. Именно поэтому такими эффективными оказываются плагины типа CCode для Movable Type (кстати, спасибо saahov`у за совет), генерящие уникальный ключ для каждой загрузки формы — они просто в три раза удорожают работу спамбота и делают неэффективной достаточно простую операцию по их обходу. Потому что для каждого постинга через форму с CCode требуется загрузить исходную страницу, достать из нее значение определенного поля и отправить его обработчику. Три операции вместо одной. Дешевле просто выкинуть блог из базы.
Переименование полей в форме работает, но недолго. Достаточно простая процедура проверки по базе моментально выявит расхождение. Собственно, я так тоже пробовал делать, меняя имя скрипта-обработчика. Если первая такая операция избавила блог от спама на несколько месяцев, то эффект от последней — полтора месяца назад, — продержался меньше суток. После чего поток спама быстро достиг каких-то жутких размеров — около 2-3 тысяч комментариев в день. Справиться с ним удалось только установкой плагина CCode. Рекомендую. Ближайшее будущее уж точно за подобными плагинами, а не сомнительным антиспамом типа Akismet.