Форма с защитой от ботов. Защита от спама в WordPress. Код для защиты от авто-спама в комментариях. Что делает Ботбор с кодом формы

Здравствуйте, уважаемые друзья. Как вы знаете, я не очень люблю нагружать свой блог плагинами, о чём не раз писал. И сегодня речь пойдёт о создании формы обратной связи без плагина, да ещё и с защитой от спама.

Думаю рассказывать о том, зачем нужно форма обратной связи нет необходимости. Каждый решает сам, нужна ли на его сайте/блоге такая форма или нет. А её назначение и так понятно из названия. А вот как создать такую форму на сайте или блоге и без плагина я вам расскажу.

Чем хороша эта форма?

Во-первых, легко устанавливается и настраивается.

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

В третьих в форму встроена защита от СПАМа.

Как организована защита от спама

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

Как установить форму обратной связи на сайт

Шаг 1. Создание файла обработчика.

Именно этот файл будет отвечать за отправку сообщений с сайта. Итак, открываем редактор Notepad++ или хотя бы блокнот. И вставляем в новый файл — вот это код:

Укажите ссылку, куда будет перенаправляться человек после отправки сообщения, а также не забудьте указать адрес электронной почты, на него будут приходить письма. Сохраняете файл в формате php. Название файла вы можете использовать своё, я же назвал файл message.php . Это название файла и путь к нему в дальнейшем потребуется прописать в самой форме.

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

А можно загрузить файл в папку с темой оформления и тогда его можно будет редактировать прямо из панели администрирования WordPress, но при смене темы оформления и настройки придётся менять.

Итак, рассмотрим пример с загрузкой файла в папку темы оформления:

/wp-content/themes/ВАША ТЕМА /message.php

Сделать вы это сможете с помощью файлового менеджера хостинга или через .

Шаг 3. Создание формы на странице.

Невидимую часть мы создали, приступаем к видимой. Теперь нужно создать форму обратной связи на странице. Для установки формы необходимо выбрать страницу и вставить в неё предложенный ниже код. Как правило, это страница с контактами, но может быть и любая другая страница.

Открывает административную панель WP – «Страницы» – выбираете или создаёте страницу для размещения формы.

Открываете страницу в режиме текстового редактора и вставляете в нужное место — вот этот код:

Форма обратной связи Ваше имя Электронная почта Тема сообщения Текст сообщения:

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

Шаг 4. Применение стиля к формы.

Во все элементы формы внедрены классы оформления, и вы сможете настроить оформление под любой дизайн. Но для этого потребуются базовые знания CSS и HTML.

В качестве примера приведу стили, которые я использовал для оформления. Скопируйте эти стили и вставьте в файл Таблица стилей (style.css).

/*стиль для всей формы*/ .form_kontact{ background-color: rgba(0, 120, 201, 0.6); /*цвет фона для формы с прозрачностью*/ border: 1px solid #1576D3; /*цвет бордюра для формы*/ border-radius:5px;} /*закругление углов формы*/ /*стиль для полей контакта*/ .input_kontact{width: 29%; /*ширина поля*/ padding: 5px; /*внутренние отступы*/ border-radius: 5px; /*закругление углов поля*/ border: 1px solid #1576D3; /*цвет бордюра для поля*/ margin: 5px; /*внешний отступ*/ } /*стиль для надписи Текст сообщения*/ .kontakt {margin: 5px; /*внешний отступ для текста*/ } /*стиль для поля текст сообщения*/ .text_kontact{width: 96% /*ширина поля*/ height: 100%; /*высота поля*/ padding: 5px; /*внутренние отступы*/ border-radius: 5px; /*закругление углов поля*/ border: 1px solid #1576D3; /*цвет бордюра для поля*/ overflow: auto; /*управление блочным объектом, полосы прокрутки появляются при необходимости*/ margin-left: 5px; /*внешний отступ слева*/ } /*стиль для кнопки*/ .submit_kontact{background: #0E71F4; /*цвет кнопки*/ padding:5px; /*внутренние отступы*/ border: none; /*отключение бордюров*/ border-radius: 5px; /*закругление углов*/ box-shadow: inset 0 1px 0 rgba(120,200,230,.5),0 5px 0 rgba(0,0,0,.15); /*параметры тени*/ margin-left: 5px; /*внешний отступ слева*/ cursor: pointer; /*курсор в виде руки*/ } /*стиль для кнопки при наведении курсора*/ .submit_kontact:hover{background:#0671BE; /*цвет кнопки*/ padding: 5px; /*внутренние отступы*/ border: none; /*отключение бордюров*/ border-radius: 5px; /*закругление углов*/ box-shadow: inset 0 6px 3px rgba(120,200,230,.5),0 3px 4px rgba(0,0,0,.15); /*параметры тени*/ color: #fff; /*цвет шрифта*/ text-decoration: none; /*нет подчёркивания на ссылке*/ margin-left: 5px; /*внешний отступ слева*/ cursor: pointer; /*курсор в виде руки*/ }

В результате форма примет вот такой вид:

Если поковыряться в коде формы можно сделать, чтобы форма выглядела вот так:

На этом создание формы обратной связи без плагина и с защитой от спама завершено. Вам лишь остаётся следовать пошаговой инструкции и внедрить эту форму к себе на блог.

А для наглядного примера советую посмотреть видеоурок, где я показываю, как установить форму и как она работает.

Также друзья для облегчения задачи предлагаю скачать исходные файлы .

А у меня на сегодня всё, я желаю вам удачи! И помните, я всегда рад видеть вас на своём блоге 🙂 До встречи в новых статьях и видео.

Методы защиты сайта от спама, защита HTML форм

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

Для начала, следует разделить все способы защиты на защиту типа КАПТЧИ (CAPTCHA) и защиты БЕЗ каптчи . Основная задача каптчи, предоставить пользователю задачу, с которой легко справится человек, но это задание будет гораздо сложнее для программы.

Защита через каптчу Графическая каптча

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

На сегодняшний день, большинство графических каптчей могут быть распознаны автоматически, а самые сложные, могут быть отправлены в в специальные сервисы для ручного разгадывания. Стоимость таких услуг составляет 1$ за 1000 каптчей. Таким образом, графическая каптча не может обеспечить серъёзной защиты для сайта, да и к тому же сложная каптча способна отфильтровать не только автоботов но и простых пользователей, которые не смогут с первого раза прочитать каптчу и просто уйдут. Исходя из вышесказанного, становится ясно, что на сколько сложна бы не была каптча, её могут распознать вручную, на специальных сервисах “за копейки”, и просто нет смысла усложнять её, и к тому же сложная каптча скорее отфильтрует некоторых пользователей чем обученных ботов.

Каптча - задачка (текстовая кптча)

Как правило текстовая (а возможно и графическая) каптча предлагающая посетителю выполнить нехитрые задачки типа “2+2=”, или написать цифрой, написанную прописью число. Несложные задачки не сильно обременяют пользователя, но всё же отнимают лишнее время. Подобная защита может быть разгадана ботом при помощи обновляющейся базы программ спамеров, база состоит из ранее подготовленных ответов разгаданных людьми. Создание такой базы становится возможным, так как не имеет большого количества вариаций, таких как с графической каптчей. Но даже не создавая такой базы, её можно пробить брутфорсом - прямым перебором возможных значений.

Интерактивные каптчи

Представляет собой приложение, как правило на flash, которое предлагает собрать картинку из пазлов или задачки на логику с расположением картинок и т.п. Каптча подобного типа будет работать, только если у пользователя установлен flash плагин. Данный вид каптчи пока не сильно распространён, и по сему имеет наивысший уровень зашиты. Разгадать флешь ребус автоматически будет ОЧЕНЬ сложно, а отправить его на ручное разгадывание скорее всего невозможно, так как flash аплет можно защитить выполнением только на определённом домене. Но данный вид каптчи всё равно уязвим для брутфорса, так как не имеет большого количества вариантов решения (до 1000), да и к тому же можно создать базу готовых ответов не выполняя задачи.

Оценка эффективности каптчи

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

Защита сайта от спама без каптчи

Основным преимуществом безкаптчевой защиты является юзабилити сайта, пользователя не напрягают глупые задачки и угадывание трудночитаемого текста. Но большинство безкаптчевых методов довольно просто обходятся при помощи самописных скриптов или управляемых браузеров. Рассмотрим основные способы защиты HTML форм без каптчи начиная с самых неординарных, и заканчивая самыми адекватными. Совсем глупые способы описывать мы всё же не будем, типа “по времени заполнения формы”, фильтрации HTTP заголовков, анализа HTTP REFFER или анализа USER AGENT. И так, приступим.

Ловушки для ботов

Данный способ защищает не саму HTML форму, а сайт от ботов в целом. Принцип такой ловушки состоит в создании какой-то страницы или раздела сайта, на которую ведут ссылки с “нормальных” страниц вашего сайта, но эти ссылки скрыты от глаз пользователя при помощи CSS стилей (overflow:hidden;). Таким образом, обычный пользователь НИКОГДА не найдёт данный раздел сайта, а бот, который тупо парсит HTML страницы в поисках форм и ссылок, с лёгкостью найдёт такую ссылку и заглянет в данный раздел. И тут срабатывает ловушка - IP адрес этого бота сыпется в БАН-лист сайта, и он уже не сможет бродить по сайту с этого IP. “Нормальным” роботам (типа поисковых Google или Yandex), через файл robots.txt сообщается, о том, что в раздел-ловушку ходить не надо.

Пожалуй, недостатков у данного метода больше чем достоинств, ну поехали: обойти данные ловушки очень просто, можно научить бота читать тот же robots.txt, можно вручную найти такой раздел и “сказать” боту не ходить туда. А можно научить бота понимать ухищрения на CSS и не ходить по таким ссылкам. Управляемый браузер вообще не попадёт в такой раздел, так как просто “не увидит” этих ссылок. Но даже если представить что это на 100% рабочий метод, и он заблокирует всех плохих ботов, не нужно забывать, что за заблокированным IP бота может быть целая сеть невинных юзеров, которые не получат доступа к вашему сайту. И с другой стороны, бот, может запросто сменить IP, через анонимный проси и продолжит успешно спамить ваш сайт.

Ловушки в HTML форме

Уже теплее, данный метод может послужить надёжной защитой от большинства скриптов, но не будем забегать вперёд. Данная защита, по принципу очень схожа с предыдущей, но имеет более адекватный результат. В HTML форму добавляется скрытое поле (возможно и не одно), скрытое - значит не type="hidden", а type="text", но скрыто визуально всё теми же приёмами на CSS, а на стороне сервера, в обработчике формы добавляется условие, что заполнение формы является правильной только при условии что наши скрытые поля будут пустыми. И что у нас получится: пользователь, который просто не видит скрытое поле НЕ заполнит его - оно останется пустым, а подавляющее число ботов, которое просто спарсило HTML форму не думая о стилях обязательно заполнит эту форму. Обработчик форму получит “неправильную” форму и просто не добавит её. Все указанные выше (ловушка для ботов) методы обхода защиты применимы и тут, так что это не панацея, а лишь защита сайта от ботов не настроенных специально на вашу защиту. То есть, если у вас сайт - гигант, то ботов будут учить обходить вашу защиту, а если у вас сайт с небольшой посещаемостью, то получится как в анекдоте про неуловимого Джо…

Ловушка со скрытым полем и HTML сущностями

Принцип построения идентичен с предыдущим, но с той разницей, что вместо пустого поля, отправляются HTML сущности типа ( " &), любой браузер преобразует эти сущности в присвоенные им знаки ("&), а бот, скорее всего вернёт сущности без изменений. Как стало понятно, от управляемого браузера это не защита, и описанные выше уязвимости применимы и сюда.

Защита на JS

Пожалуй, саамы адекватный и “красивый” способ безкаптчевой защиты. Игры со стилями, поисковики могут понять неправильно, и это кончится печально, а с JS никаких проблем. Один из примеров с описанием JS защиты приведен тут. Большинство современных ботов не смогут обойти подобную защиту (без ручного вмешательства конечно под конкретный пример), научить бота обходить такую защиту будет на много сложнее, чем в предыдущих видах ловушек, но и не составит особой сложности. И по-прежнему, для управляемого браузера этот вид защиты не будет даже заметен.

Итоги

Можно с уверенностью сказать, что панацеи от спама нет и быть не может, какую бы человек не придумал защиту, её сможет обойти другой человек (в нашем случае), но стоит заметить, что если постоянно менять, скажем алгоритм защиты на JS, то спамеры просто не в состоянии будут всё время обучать бота и ваш сайт с плавающим алгоритмом защиты будет защищён от ботов такого типа. Но с другой стороны, чего бы вы не придумали на JS или на другой ловушке, управляемы браузер даже не спотыкнётся. С управляемым браузером можно бороться только при помощи каптчи любого вида. Графическая каптча разгадывается “на ура” на автомате или руками. А вот интерактивная или текстовая каптча с вопросами и задачками будет разгадана только по базе готовых ответов, а если такая каптча будет тоже плавать? - то есть генерироваться разные вопросы или картинки и т.д. то и базу писать-то нет на что. Единственным решением останется только отправить такую каптчу на ручной анализ, но и этому можно воспрепятствовать используя каптчу на FLASH с защитой по домену на выполнение, то есть флешь каптча будет работать только на домене вашего сайта, и отправка её на ручной разбор ничего не даст. Но FLASH каптча - это ещё одно узкое место, у некоторых пользователей не установлен флешь плеер. А с другой стороны, интерактивная и текстовая каптча имеет ограниченное количество вариантов ответов и уязвима для брутфорса, и тут уже понадобится простенький фаервол с анализатором лога, который не допустит слишком быстрых/частых попыток отправить форму для одной сессии/IP/User agent. Но и эту защиту можно обойти используя БОТНЕТ или много прокси, и так можно продолжать до бесконечности.

Главное не перестараться, ведь у нас задача не просто обеспечить супер безопасность, но и найти компромисс с юзабилити и доступными ресурсами посетителей (FLASH, JS..), можно прикрутить отправку уникального кода на СМС, и это станет страшным ударом для спамеров, но не менее сильным будет удар и по обычным пользователям которые не станут вводит свой номер телефона, ждать СМС, вводить секретный код лишь для отправки комментария (пример).

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

P.S. если у вас пока не большой проект, и он не имеет большой посещаемости, то не стоит сильно заморачиватся, используйте любой вид безкаптчевой защиты (например предложенный выше на JS)или придумайте свой и будет вам счастье.

P.P.S не стоит сильно полагаться на защиты в популярных CMS и движках форумов, эти движки лакомые для всех спамеров, так как на них поднято много сайтов, и их все можно спамить по одному алгоритму.

Не забываем оставлять

Три года назад на Хабре была опубликована статья , рассказывающая о принципиально отличном от CAPTCHA решении для PHP по защите форм от спам-ботов. Это решение основано на идеях, изложенных в своих статьях Филом Хааком (Phil Haack) - Honeypot Captcha и Недом Батчелдером (Ned Batchelder) - Stopping spambots with hashes and honeypots . К сожалению, предложенный в статье класс, написан для PHP4 и не развивается с 2007-го года. Хочу предложить вашему вниманию его аналог на PHP5.

Ботобор

Ботобор - библиотека, написанная на PHP 5.0, предназначенная для защиты от заполнения веб-форм роботами. Используемые ей методы, незаметны для посетителей-людей.

Для выявления роботов Ботобор использует следующие проверки:

  • несовпадение значения REFERER с URL, на котором расположена форма;
  • слишком маленький промежуток между показом формы и её отправкой (настраивается);
  • слишком большой промежуток между показом формы и её отправкой (настраивается);
  • заполнение поля-приманки.

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

ПримерыПростой пример
require "botobor.php" ;

// Получите разметку формы тем способом, который предусмотрен у вас в проекте, например:
$html = $form -> getHTML () ;
// Создайте объект-обёртку:

// Получите новую разметку формы
$html = $bform -> getCode () ;

Фрагмент кода, обрабатывающего данные формы:

require "botobor.php" ;

if (Botobor_Keeper:: isHuman () )
{
// Форма отправлена человеком, можно обрабатывать её.
} Пример настройки формыФрагмент кода, создающего форму:
// пусть $html содержит код формы
$bform = new Botobor_Form($html ) ;
// отключаем поля-приманки
$bform -> setCheck ("honeypots" , false ) ;
// устанавливаем нижний предел заполнения формы в 2 секунды
$bform -> setDelay (2 ) ;
// устанавливаем верхний предел заполнения формы в 60 минут
$bform -> setLifetime (60 ) ;
$html = $bform -> getCode () ;
В остальном всё также как и в первом примере.Что у ней внутре?Что делает Ботбор с кодом формы В конструкторе Botobor_Form принимает HTML-код формы. В этот код, после открывающего тега , добавляется скрытый (display: none) , содержащий input с мета-данными формы. Эти мета-данные хранят подписанную информацию о времени создания формы, установленных опциях и т. д. В этот же скрытый блок Ботобор может вставлять поля-приманки.Поля-приманки Поля-приманки предназначены для отлова роботов-пауков, которые находят формы самостоятельно. Такие роботы, как правило, ищут в форме знакомые поля (например, name) и заполняют их. Ботобор может добавить в форму скрытые от человека (при помощи CSS) поля с такими именами. Человек оставит эти поля пустыми (т. к. просто не увидит), а робот заполнит и тем самым выдаст себя.

По умолчанию в коде формы ищутся поля с любым из следующих имён: «name», «mail», «email» (список настраивается). У каждого найденного поля имя меняется на сгенерированную случайным образом комбинацию символов и создаётся скрытое средствами CSS поле с оригинальным именем.

Обратное преобразование имён будет сделано во время вызова метода Botobor_Keeper::handleRequest() или Botobor_Keeper::isHuman().

Буду рад, если кому-то пригодится.

Создание формы обратной связи Форма обратной связи и спам в почте

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

Способ первый.
Как известно, спам с формы обратной связи начинает приходить не сразу, а через некоторое время, только после того, как спамер (робот спамера), сканируя сайты в интернете, найдет вашу страницу с формой. После этого страница заносится в базу и начинается планомерная атака на ваш почтовый ящик. Следовательно, надо усложнить спамеру поиск вашей страницы с формой. Самый простой и действенный способ - регулярно менять её имя. А чтобы ещё больше затруднить работу спамеру, можно организовать этот процесс следующим образом.

Так как спам-программы обычно отключают выполнение скриптов JavaScript , то изменим нашу страницу с формой обратной связи так, чтобы на ней не было самой формы, а она открывалась бы в отдельном небольшом окне с помощью JavaScript и, следовательно, будет недоступна спам-роботу:
текст ссылки .

Вы можете отправить сообщение, заполнив форму обратной связи.

Таким образом, сама форма обратной связи содержится на странице mess.html и открывается в отдельном окне размером width=500, height=350 в левом верхнем углу экрана. Кстати, там же откроется и php-страница с результатом отправки сообщения (см. статью "Создание формы обратной связи на сайте)". Теперь при появлении спама с формы обратной связи вам необходимо будет переименовать страницу mess.html и изменить ссылку в javascript. Так как обычно появление спама в почте начинается примерно через 1-2 месяца после размещения на сайте формы обратной связи, то больших усилий по изменению адресов от вас не потребуется. Для более эффектного вывода формы обратной связи в отдельном окне можно использовать плагины jQuery . О том, как просто это сделать, смотрите в статье "Применение jQuery для формы обратной связи ". Способ второй.
Напомню и еще один способ уменьшения спама, о котором упоминалось ранее . Вы создаете в форме обратной связи обычное текстовое поле ввода, но делаете его скрытым (style="display:none" ). Пользователи этого поля не видят и не заполняют, а роботы могут заполнить, ибо стараются заполнить все поля. В php-программе перед отправкой сообщения нужно проверить это поле. Если оно заполнено - значит, это робот, если пустое - то "живой" посетитель. Таким образом, мы не требуем от посетителя сайта разгадывать капчу, а анализируем поведение робота-спамера. Этот прием обеспечивает более эффективную защиту, чем первый, и его применение в форме обратной связи никогда не будет лишним.

Для реализации этого способа добавим в любом месте внутри тега ... скрытое поле с именем, например, spam :
.

В РНР-программе проверим это поле с помощью конструкции if (если). Если поле пустое (empty), то выполняется блок отправки письма, заключенный в фигурные скобки, выделенные жирным красным цветом. В противном случае, этот блок пропускается и выполняется выход из программы без отправки письма (exit):

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

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

1. Генерация формы на стороне клиента с помощью JavaScript.

Впервые я применил этот подход на сайте «Свободна» 3 года назад.
За всё это время на сайте не появилось ни одного спам-сообщения, оставленного роботами. Только троллями. Но тролли - это другая история.

В основе этого метода лежит предположение, что спам-боты: 1) не умеют исполнять JavaScript, 2) даже если и умеют, то не работают со сгенерированным html-кодом.

Механизм работы такой. У вас есть JavaScript функция, которая умеет рисовать форму. Она может вызываться автоматически, например, после загрузки страницы или как реакция на определенные действия пользователя, например, после клика на ссылку «».

Простой пример генерации формы: //Функция, которая добавляет форму в конец страницы function appendForm(){ var form = " "+ "Ваше имя:
"+ "
"+ "Ваше сообщение:
"+ "
"+ ""+ " "; document.body.innerHTML+=form; } //Запустить функцию после загрузки документа window.onload = appendForm; Минусы:
  • Тяжело применить к сложным формам.
  • Форму не смогут отправить те 5% пользователей , у которых отключен JavaScript.
2. Использование капчи (captcha).

Капча представляет собой дополнительное поле в форме, в которое пользователь должен ввести покореженные символы с картинки рядом.

Основывается на предположении, что роботы: 1) не умеют читать с картинок, 2) даже если умеют, то плохо видят и не понимают плохо прорисованные символы.

Капч существует куча разновидностей с разной функциональностью. Последнее время стала довольно популярна reCaptcha .

Она работает как с включенным, так и отключенным JavaScript"ом, позволяет менять картинку, может озвучить написанное на картинке, а также помогает оцифровывать книги, за счет вводимых пользователями символов.

Минусы: 3. Генерация скрытого поля на стороне клиента с помощью JavaScript.

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

Он заключается в том, что не вся форма генерируется JavaScript, а только одно скрытое поле с каким-нибудь случайным значением (или не случайным - вам решать).

А затем на стороне сервера проверяется было ли это поле среди отправленных, и если нет, то считается, что форма была отправлена роботом.

Пример кода на стороне клиента (JavaScript): //Функция, которая добавляет поле _antispam во все формы на странице function appendAntiSpamField(){ var forms = document.getElementsByTagName("form"); for(var i = 0,l = forms.length;i if(isset($_POST["_antispam"])){ //..продолжить обработку формы }else{ //..обработка ошибки echo "Сработал анти-спам фильтр." echo "Включите JavaScript, для того чтобы отправить форму."; exit; } Минусы:
  • Форму не смогут отправить те 5% пользователей , которые не используют JavaScript.
4. Проверка на наличие основного поля формы.

Бывает такое, что спаммеры пытаются отсылать информацию не используя формы на ваших страницах, а напрямую вашему серверу.

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

Поэтому есть смысл проверять наличие какого-нибудь важного поля вашей формы среди принимаемой информации.

Пример кода на стороне сервера (PHP): if(isset($_POST["text_body"])){ //..продолжить обработку формы }else{ //..обработка ошибки echo "Спаммеры! Не балуйтесь!"; exit; }

Также никогда не забывайте проверять и чистить ВСЮ принимаемую информацию!

5. Ограничение количества ссылок в сообщении.

Это более сложный подход, основывающийся на анализе получаемых данных.

99.9% спаммерских сообщений включают в себя ссылки и адресса сайтов. Часто они пытаются впихнуть в одно сообщение несколько ссылок сразу. Также многие спам-боты знают о существовании различных систем обработки информации на сайтах и могут составлять свои сообщения в виде обычного текста, html, BB-кода и др.

Но в этом и их минус - их можно отсеивать по количеству ссылок в сообщении.

Это может быть сделано, например, так:

Пример простого кода на стороне сервера (PHP): //Функция, которая проверяет строку на наличие в ней ссылок //и возвращает false, если их число больше лимита. //По умолчанию, лимит равен 1 function fits_limit_links($str, $allowed_links=1){ //Искать http:// $pattern = "/http:///i"; preg_match_all($pattern, $str, $link_matches); //Если встречаются совпадения и их больше, чем $allowed_links, //то вернуть false, иначе вернуть true return (isset($link_matches) && count($link_matches) > $allowed_links)? false: true; } $allowed_links = 2; if(fits_limit_links($_POST["text_body"], $allowed_links)){ //..продолжить обработку формы }else{ //..обработка ошибки echo "Сработал анти-спам фильтр." echo "Сообщение может содержать не более чем " .$allowed_links ." ссылок"; exit; } Минусы:
  • Анализ содержимого требует более сложных алгоритмов и ресурсов на сервере. Повышается вероятность неправильной обработки содержимого.
  • Пользователи не смогут отправлять больше ограниченного числа ссылок.
6. Использование пустого поля, скрытого CSS. Дата: Опубликовано сообщений: из них спам: Отфильтрованный спам: Фильтр 1 Фильтр 2 Фильтр 3 Фильтр 4 Фильтр 5

Погрешность результатов исследования не составляет более 5%, но думаю, что она не больше 2%. Как блокированный спам могли быть записаны, например, неверные попытки пользователя набрать капчу или написать сообщение с более чем, одной ссылкой. Но поскольку количество «полезных» сообщений составляет всего 1%, то «живые» пользователи просто физически не могли существенно повлиять на статистику.

Итоги

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

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

Перепечатки приветствуются, желательно со ссылкой на источник.

Если будут какие-то вопросы - пишите мне, постараюсь ответить.

No pasaran!

Вы дочитали до самого конца страницы.