Как проверить, вводит ли робот информацию
Вопрос
У меня есть веб-форма, которую пользователи заполняют, а информация отправляется на сервер и сохраняется в базе данных.Я боюсь, что роботы могут просто заполнить форму, и в итоге у меня останется база данных, полная бесполезных записей.Как я могу запретить роботам заполнять мои формы?Я думаю, может быть, что-то вроде обнаружения роботов Stackoverflow, когда, если он думает, что вы робот, он просит вас подтвердить, что вы им не являетесь.Есть ли серверный API в Perl, Java или PHP?
Решение
Есть несколько решений.
Используйте CAPTCHA.ТАК использует реКАПЧА насколько я знаю.
Добавьте в форму дополнительное поле и скройте его с помощью CSS (display:none).Обычный пользователь не увидит это поле и поэтому не будет его заполнять.При отправке вы проверяете, пусто ли это поле.Если нет, то вы имеете дело с роботом, который тщательно заполнил все поля формы.Эту технику обычно называют «приманкой».
Добавьте функцию таймера JavaScript.При загрузке страницы значение начинается с нуля, а затем увеличивается с течением времени.Обычный пользователь какое-то время прочитает и заполнит вашу форму и только потом отправит ее.Робот просто заполнит и отправит форму сразу после ее получения.Вы проверяете, сильно ли значение изменилось с нуля при подаче.Если да, то это, скорее всего, настоящий пользователь.Если вы видите всего пару секунд (или даже вообще не видите значения из-за того, что роботы не выполняют JavaScript), то, скорее всего, это робот.Однако это будет работать только в том случае, если вы решите, что вашим пользователям потребуется включить JavaScript для выполнения операций «записи».
Наверняка есть и другие техники.Но они довольно просты и эффективны.
Другие советы
Вы можете использовать реКАПЧА (то же самое, что и stackoverflow) - у них есть библиотеки для ряда языков программирования.
Я всегда предпочитал капчу Honeypot (статья Фила Хака), поскольку он менее агрессивен для пользователя.
Капчи создают проблемы с доступностью и в конечном итоге будут преодолены программным распознаванием.
Я рекомендую прочитать это короткая статья о ловушках для ботов, которые включают в себя скрытые поля, как уже предположили Мэтью Вайнс и New in Town.
В любом случае, вы по-прежнему можете использовать как капчу, так и ловушки для ботов.
КАПЧА — это здорово.Еще одна вещь, которую вы можете сделать, чтобы предотвратить 99% трафика роботов, но при этом не раздражать пользователей, — это проверять поля.
На моем сайте я проверяю текст в таких полях, как почтовый индекс и номер телефона.Это устранило всю нецелевую дезинформацию о роботах.
Вы можете создать двухэтапную систему, в которой пользователь заполняет форму, а затем должен ответить на электронное письмо, чтобы «активировать» запись в течение установленного периода времени — скажем, 24 часов.
В серверной части вместо того, чтобы заполнять текущую таблицу всеми отправленными формами, вы можете поместить их во временную таблицу, которая автоматически удаляет любую строку, которая старше вашего выделенного времени.Если у вас нет серьезной проблемы с ботами, я думаю, что таблица не станет такой большой, особенно если первая форма состоит всего из нескольких полей.
Преимущество этого подхода заключается в том, что вам не нужно использовать капчу или какую-либо другую подобную технологию, которая может создать некоторые проблемы с доступностью.