Есть еще один способ защиты от спамоботов - переменные названия полей ввода.
Т.е. мы имеем форму, допустим, с 2 полями, для имени и для сообщения:
Код:
Ваше Имя:
<input type="text" name="UserName" value="" />
Ваш текст:
<input type="text" name="Post" value="" />
Такая постановка вопроса боту очень даже удобна.
Но что он скажет на такую вот форму:
Код:
Ваше Имя:
<input type="text" name="eyWUpIFC6J1JcHPYWQLd" value="" />
Ваш текст:
<input type="text" name="qgyoPxauUq8tQEXxpUer" value="" />
В этом случае имя поля ввода генерируется случайным образом при каждой выдаче формы пользователю (или при получении данных из формы от оного, для экономии ресурсов), хранятся в сессии и ждут получения данных пользователя.
Но есть "но":
Легко вытянуть имя поля, зная контекст его использования.
Благо эту ситуевину можно решить, используя JavaScript/AJAX
Еще одно но в плане юзабилити:
Все автодополнения в браузерах идут лесом, т.к. они привязываются к имени поля.
Как еще одно звено в защите можно использовать проверку времени заполнения формы, т.е. разницу между ее выдачей юзверю и получением данных.
// Вряд-ли живой человек сможет написать пост на форум/коммент в блог за 5 секунд, а вот боту пыл поубавит.
Еще сильный ход - отказаться от проверок во время отправки сообщения, а направить все силы на защиту от регистрации "неживого населения" на сайте, ессно при этом всем незареганным пользователям права ReadOnly.