Статьи

Простое предотвращение спама с помощью скрытых полей формы

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

Как отмечалось в личной записи в блоге в ноябре 2011 года, у меня были некоторые проблемы со спамом, и я нашел решение, которое, как я узнал, не является действительно новым, но о котором мало кто знает или знает. Это чрезвычайно простой, но эффективный метод предотвращения спама на формах вашего сайта, которым я хотел бы поделиться с вами здесь.

Проблема

Очевидно, что по мере роста популярности вашего сайта спам неизменно увеличивается. Существует несколько известных методов предотвращения спама, в том числе:

  • Запрет IP-адресов
  • Принуждение пользователей зарегистрироваться и подтвердить свою электронную почту перед публикацией
  • Изображения CAPTCHA или похожие тесты Тьюринга
  • Сторонние решения, которые используют постоянно растущие базы данных известных спаммеров для сравнения
  • Модерирование или утверждение сообщений вручную

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

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

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

Решение

Таким образом, там я удалял спам после спама, пытаясь придумать неинтрузивное решение, когда я начал замечать шаблон … спамбот не может различить разницу между тем, являются ли поля необязательными или обязательными, поэтому он просто заполняет их все. Если вы думаете об этом, каждый веб-сайт отличается по разметке обязательных полей; некоторые делают это со звездочками, некоторые с красным текстом, некоторые с все еще плохо поддерживаемым атрибутом HTML5 «обязательный», а другие даже не удосуживаются пометить их, а скорее перенаправят вас обратно, если вы пропустили один. Имеет смысл только то, что бот споткнется о такую ​​вещь и просто не попробует.

Эврика! Вот он, тест Тьюринга, который был встроен в мое приложение все время! Теперь, как максимально использовать это.

Спам-боты не только борются с распознаванием обязательных полей, но и с чтением CSS или JavaScript, по крайней мере, на данный момент. Самое простое решение — добавить абсолютно произвольное поле к каждой форме, а затем скрыть его, используя любое количество таких методов, например:

  <input type = "text" name = "foo" style = "display: none;"> 

В качестве альтернативы вы можете выбрать что-то более сложное, например, дать полю ID или класс, который затем заставит бота сканировать ваши CSS-файлы, чтобы определить видимость элемента.

Вы также можете использовать Javascript для удаления произвольного поля с экрана при загрузке страницы, например:

  <div id = "fooDiv">
 <label for = "foo"> Оставьте это поле пустым </ label>
 <input type = "text" name = "foo" id = "foo">
 </ DIV>
 <Скрипт>
 (function () {
     var e = document.getElementById ("fooDiv");
     e.parentNode.removeChild (е);
 }) ();
 </ Скрипт> 

Обратите внимание, как поле в примере получило метку, указывающую пользователю оставлять поле пустым, если у него отключен JavaScript.

Теперь вы можете быть уверены, что если поле когда-либо будет иметь значение, когда отправка формы достигнет вашего сервера, то транзакция может быть отклонена как нежелательная. Независимо от того, какой метод вы используете, у бота теперь есть дополнительная задача выяснить, является ли данное поле видимым и / или обязательным, что, как вы могли бы поспорить, потребовало бы некоторого довольно продвинутого ИИ или более целенаправленного подхода от имени спаммера.

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

Конечно, ни одно решение не является полностью надежным, поскольку спам иногда все же подается вручную людьми, поэтому никогда не повредит иметь более одной процедуры предотвращения. Чтобы добавить еще один уровень защиты, при обнаружении спама вы все равно должны пойти дальше и перенаправить бота, как если бы это была успешная отправка формы; Я не люблю давать им повод для исследования.

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

Комментарии к этой статье закрыты. Есть вопрос по HTML? Почему бы не спросить об этом на наших форумах ?