Использование случайных полей имени для ввода для борьбы со спам-ботами - PullRequest
3 голосов
/ 09 января 2012

Я рассматриваю возможность использования случайных входных имен для формы регистрации. Это будет сделано так:

  1. Пользователь запрашивает регистрационную форму сайта.
  2. Создание случайных имен для полей ввода и сохранение их в сеансе пользователя.
  3. Визуализация формы и отображение ее пользователю.

Мне просто интересно, дает ли этот метод мне что-нибудь. Если драйвер сеанса является файлом cookie - это Зашифрованы и защищены наилучшим образом с использованием сторонней библиотеки, которую я считаю достаточно сохранить . Если пользователь не использует файлы cookie, я могу отказаться от регистрации.
Чтобы удалить куки как потенциальную угрозу безопасности, я могу хранить сессии в базе данных. Это кажется более безопасным, но также может привести к перегрузке сервера (?).
Мой вопрос довольно прост. Есть ли смысл реализовывать такую ​​функцию?

Ответы [ 3 ]

6 голосов
/ 09 января 2012

Стандартный подход заключается в наличии скрытого текстового поля. Это поле с 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. Они просто анализируют разметку формы и видят текстовое поле, которое, похоже, нуждается в заполнении. Таким образом, они заполняют поле некоторыми случайными данными. Поскольку поле формы, которое никогда не должно видеть обычный пользователь, заполнено, это означает, что вы, вероятно, имеете дело с ботом.

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

0 голосов
/ 26 апреля 2015

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

<input type="text" name="<?php echo $obj->DynamicName("fieldName")?>"/>

и после отправки формы она заполнит $_POST['fieldName'] соответствующими данными, как только вы создадите ее объект.

0 голосов
/ 11 апреля 2012

Попробуйте проверить IP по спискам известных спаммеров, это очень эффективно.Хорошие примеры: Botscout и Spambusted .Я попробовал и то и другое, и они сократили количество регистраций моих спаммерских ботов.

...