Как проверить, вводит ли робот информацию - PullRequest
3 голосов
/ 06 августа 2009

У меня есть веб-форма, которую пользователи заполняют, а информация отправляется на сервер и сохраняется в базе данных. Я обеспокоен тем, что роботы могут просто заполнить форму, и я получу базу данных, полную бесполезных записей. Как я могу запретить роботам заполнять мои формы? Я думаю, может быть, что-то вроде обнаружения робота в Stackoverflow, где, если он думает, что вы робот, он просит вас подтвердить, что это не так. Существует ли серверный API в Perl, Java или PHP?

Ответы [ 6 ]

10 голосов
/ 06 августа 2009

Есть несколько решений.

  1. Используйте капчу. Насколько я знаю, SO использует reCAPTCHA .

  2. Добавьте дополнительное поле в форму и скройте его с помощью CSS (отображение: нет). Обычный пользователь не увидит это поле и поэтому не заполнит его. При подаче вы проверяете, является ли это поле пустым. Если нет, то вы имеете дело с роботом, который тщательно заполнил все поля формы. Эту технику обычно называют «приманкой».

  3. Добавить функцию таймера JavaScript. При загрузке страницы он начинает значение с нуля, а затем увеличивается с течением времени. Обычный пользователь будет читать и заполнять вашу форму в течение некоторого времени и только потом отправлять ее. Робот просто заполнит и отправит форму сразу же после ее получения. Вы проверяете, сильно ли значение ушло с нуля при отправке. Если это так, то это скорее всего реальный пользователь. Если вы видите всего пару секунд (или вообще не видите значения из-за того, что роботы не выполняют JavaScript), то это скорее всего робот. Однако это будет работать только в том случае, если вы решите, что вашим пользователям потребуется JavaScript для выполнения операций «записи».

Есть и другие техники наверняка. Но это довольно просто и эффективно.

5 голосов
/ 06 августа 2009

Вы можете использовать reCAPTCHA (так же, как stackoverflow) - у них есть библиотеки для ряда языков программирования.

4 голосов
/ 06 августа 2009

Я всегда предпочитал капчу Honeypot ( статья Фила Хаака ), поскольку она менее агрессивна для пользователя.

3 голосов
/ 06 августа 2009

Captchas приносит проблемы с доступностью и в конечном итоге будет побежден распознаванием программного обеспечения.

Я рекомендую прочитать эту короткую статью о ловушках для ботов, которые включают скрытые поля, как уже предлагали Мэтью Вайнс и Нью в городе.

В любом случае, вы все еще можете использовать как капчу, так и ловушку для бота.

2 голосов
/ 06 августа 2009

CAPTCHA отлично. Еще одна вещь, которую вы можете сделать, чтобы предотвратить 99% трафика вашего робота и при этом не раздражать ваших пользователей, это проверить поля.

Мой сайт, я проверяю текст в таких полях, как почтовый индекс и номер телефона. Это устранило всю нецелевую дезинформацию робота.

0 голосов
/ 06 августа 2009

Вы можете создать двухэтапную систему, в которой пользователь заполняет форму, но затем должен ответить на электронное письмо, чтобы «активировать» запись в течение установленного периода времени - например, 24 часа.

В серверной части вместо того, чтобы заполнять текущую таблицу всеми отправленными формами, вы можете поместить их во временную таблицу, которая автоматически удалит любую строку, которая старше, чем выделенное время. Если у вас нет серьезных проблем с ботами, то я думаю, что таблица не станет такой большой, особенно если в первой форме всего несколько полей.

Преимущество этого подхода заключается в том, что вам не нужно использовать капчу или какую-либо другую технологию, подобную той, которая может создать некоторые проблемы с доступностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...