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


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

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

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

Author: Vanitas, 2012-01-09

3 answers

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

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

 6
Author: GordonM, 2012-01-09 10:18:26

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

 0
Author: RedPoppy, 2012-04-11 05:51:24

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

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

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

 0
Author: Shubanker, 2015-04-26 01:44:34