Стандартный подход заключается в наличии скрытого текстового поля. Это поле с type = text, но к нему применяются правила CSS, так что оно невидимо.
разметка:
<input type="text" name="put_some_innocuous_name_here" class="some_innocuous_css_class_name_here" value="" />
CSS:
input.some_innocuous_css_class_name_here {
display: none;
}
PHP:
if ((isset ($_POST ['put_some_innocuous_name_here']))
&& ($_POST ['put_some_innocuous_name_here'] != ''))
{
throw new Exception ('Suspected bot!');
}
Как это работает, довольно просто. Обычный пользователь никогда не увидит ваше скрытое текстовое поле, потому что правила CSS будут держать его скрытым. поэтому реальный пользователь никогда не заполнит его.
Однако большинство спам-ботов не знают о CSS. Они просто анализируют разметку формы и видят текстовое поле, которое, похоже, нуждается в заполнении. Таким образом, они заполняют поле некоторыми случайными данными. Поскольку поле формы, которое никогда не должно видеть обычный пользователь, заполнено, это означает, что вы, вероятно, имеете дело с ботом.
Не используйте для этого тип ввода = скрытый, потому что большинство спам-ботов достаточно умны, чтобы замечать их и игнорировать их.