Модуль Антиспам

Эксклюзивная система защиты Доски Объявлений от спамеров. Система контрольных вопросов-ответов способна остановить даже ручной спам. Возможность использовать регулярные выражения, для блокирования опасных слов такие как амфетамин, наркотик и тд. Из за подобных объявлений мой сайт уже неоднократно блокировался хостингом.AntiSpam-setup

  • Комментарии - в тексте можно использовать комментарии, однострочный // и многострочный
    /* закомментировано
    много текста
    */
    C помощью комментариев можно легко отключить часть текста из обработки при этом, не удаляя его.
  • Цифровой отпечаток – берем текст и удаляем из него все символы, включая пробелы, знаки препинания, перевод строки и т.д. Оставляем только цифры!
  • /*AUTO_BLOCK … */ – здесь хранятся данные автоблокировок, чтобы сбросить все автоблокировки достаточно удалить этот блок комментариев.
  • Блокировка по вхождению строки. Этот текст разбивается построчно в массив, каждая строка патерн (шаблон) – то, что мы будем искать. Далее берем все поля, которые нам пришли из формы ввода: заголовок, текст, телефоны, емаел и т.д. Каждые патерн прогоняется по всем поля и ищем совпадение. Если совпадение найдено, выдаем ошибку, продолжаем искать дальше. Патерны могут быть:
    • Цифровой, блокировка телефонов В каждой строке пишем номер телефона – только цифры, например заблокировать телефон +380682542635 – код страны писать не нужно оставляем только 0682542635. Если в патерн содержит только цифры, то для всех полей, из формы ввода, будет дополнительно создан цифровой отпечаток и искать совпадение будем, как в самом поле, так и в его отпечатке. Поэтому даже если найдется какой-то умник и попытается пропихнуть свой телефон в заголовке в таком виде: 068 и 254 плюс 26 и 35 у него все равно ничего не выйдет. Надо быть осторожным, если вы хотите блокировать телефон с коротким номером (4-5 цифр) – не исключено случайное совпадение с цифровым отпечатком.
    • Обычная строка, блокировка строки например заблокировать текст с фрагментом домена:
      mysate.com.ua
      или заблокировать текст со словом:
      срочно
      Поиск использует функцию mb_stristr не чувствителен к регистру и найдет все варианты срочно, Срочно, СРОЧНО ….
    • Регулярное выражение – если патерн начинается символом ~ он трактуется как регулярное выражение. Например заблокируем все варианты такого опасного слова как амфетамин, из-за которого мои сайты уже не раз получали предупреждение от раскомнадзора и даже блокировались хостингом. Патерн будет такой:
      ~амфетамин[а-я]*~u
      – найдет все варианты амфетамин, амфетаминами, амфетамины и тд. В принципе для такого простого примера можно использовать блокировку обычной строки задав только корень слова амфетамин, он также найдет все выше перечисленные вхождения. Вообще, старайтесь использовать простой поиск – он работает быстрее. Синтаксис регулярных выражений изучайте самостоятельно – слишком обширная тема.
  • Блокировка IP Пишем каждый IP или диапазон IP в отдельной строке. Пример заблокировать IP:
    123.45.65.78
    заблокировать диапазон IP:
    123.45.65.0/120
  • Автоблокировка 2 видов:
    1. Новые объявления – отслеживаем время между новыми объявлениями, как только пользователь создал новое объявление, его телефоны и IP записывается в блок AUTO_BLOCK соответственно, устанавливается время создания. Следующее новое объявление пользователь с такими телефонами и IP сможет создать только по истечению ==Интервал между новыми сообщениями== задается в админке.
    2. Контрольные вопросы-ответы это возможность вместо обычной капчи использовать нарисованы вопросы и варианты ответов. Для этого необходимо в админке:
      1. установить галочку ==Контрольные вопросы – ответы==,
      2. затем обязательно задать Шифр-ключ (любой набор символов),
      3. установить =Количество неудачных ответов перед блокировкой пользователя=,
      4. установить ==Время блокировки== – время на которое пользователь будет блокирован если он, все таки, не сможет ответить на контрольный вопрос.

      Далее написать список этих самых вопросов-ответов. Формат простой, построчно пишем:

      • Вопрос
      • правильный ответ
      • неправильный ответ 1
      • неправильный ответ 2
      • неправильный ответ 3
      • и т.д.

      Если текст слишком большой и надо выполнить перенос строки вставляем ‹br›.
      Блоки вопросов разделяются пустой строкой.

      *Вопросы и ответы я придумал, чтобы ограничить поток рекламных объявлений на городской доске объявлений Ильичевск. Вопросы предполагают минимальное знание города: расположение объектов, известных людей города и другие специфические вопросы. Например вопрос – Известный бизнесмен нашего города – далее список фамилий или Самый большой базар нашего города. Для того, чтобы ответить на эти вопросы не достаточно посмотреть goole map или почитать новости интернет, надо просто быть жителем города :) .

    3. Формула в качестве контрольных вопросов можно использовать простую математическую формулу, для этого надо включить галочку ==Включить формулу==
    4. Алгоритм блокировки – если пользователь не смог ответить заданное число раз на контрольный вопрос, все его телефоны + IP адрес записываются в блок AUTO_BLOCK и соответственно блокируются. Через время указанное выше телефоны и IP будут автоматически разблокированы. в AUTO_BLOCK формат записи такой:
      065065065//2//4//2014-06-17 08:37:10//2014-06-18 16:57:59
      в качестве разделителя параметров используется двойной слеш // (как комментарии)

      • 065065065 – телефон
      • 2 – юзер 2 раза ответил на контрольный вопрос неправильно по истечению времени блокировки этот параметр сбрасывается в ноль
      • 4 – всего неправильных ответов, не сбрасывается
      • 2014-06-17 08:37:10 – время последнего неправильного ответа
      • 2014-06-18 16:57:59 – время последнего нового сообщения

      Чтобы разблокировать отдельный телефон или IP нужно просто удалить соответствующие строки из AUTO_BLOCK или сбросить в ноль второй параметр.

Комментарии 15 к “Модуль Антиспам”

  1. admin:

    чтобы этот модуль мог работать автономно нужно отключить проверку ответа пользователя на вопрос
    открываем файл ads_antispam.php — в самом низу функция main()
    закоментируй строку
    $this->check_answer();
    остальные блокировки – должны работать

  2. CS:

    в модуле Анти-Спам ads_antispam.php в функции check_answer() присутствуют строки, обрабатывающие поля телефона и IP.

    …foreach ($this->_post['ads_phone'] as $key=>$phone)…

    Это – точно не ошибка? Я ожидал, что эта функция только проверяет ответ на вопрос.

    Просто, пытаюсь найти причину, почему у меня при снятых галочках:

    Контрольные вопросы – ответы ->(админка Ads Anti Spam)
    Включить формулу -> (админка Ads Anti Spam)
    Антибот картинка (capthca) ads_capthca -> (админка Ads Anti Spam)

    все равно вываливается предупреждение: Ответ неверный!

    но если поставить галочку [Контрольные вопросы - ответы] – то все работает, и даже если после этого снять галочку, то тоже работает, но до тех пор, пока не очищу куки в броузере.

  3. CS:

    ну да. конечно, же нужны эти строки: …foreach ($this->_post['ads_phone'] as $key=>$phone)…
    прошу прощения. Они изменяют фильтр.

    Но вот, что заметил. В исходном архиве нет файла ads_antispam.php. Он генерируется самим плагином в процессе работы. И когда у меня открыт этот файл для редактирования, то появляются сообщения, что этот файл был изменен из вне и надо – ли мне его перегрузить. Так, может в этом причина сбоев? что-то типа новой сессии и ответ не совпадает с вопросом если поля заполняются медленно.

    • admin:

      ого вы тут написали страсти какие, ads_antispam.php нет он не генерируется – он не идет с самим плагином а идет вместе со сборкой http://wp.od.ua/?p=1464
      потому как пока тестируется, планирую перевести его в оригинальную сборку
      кукисы используем только для того чтобы запомнить ответ пользователя на контрольный вопрос и не мучить его каждый раз при сохранении формы

  4. Добрый день!
    Поддерживаю CS. Точно такие-же проблемы, как в сообщении 2.
    почему у меня при снятых галочках:

    Снята галка: Контрольные вопросы – ответы ->(админка Ads Anti Spam) — “вы не ответили на контрольный вопрос”.
    Но если поставить галочку [Контрольные вопросы - ответы] – то все работает, и даже если после этого снять галочку, то тоже работает, но до тех пор, пока не очищу куки в броузере.

    Извините за плагиат.

    • Виноват. Ответ искал нижележащих комментариях. На первое сообщение не обратил внимание.

      Обратите внимание. Если использовать classfields, то в модуле карты исчез поиск населенного пункта.

  5. Сергей:

    Не отображается список вопросов. И после отправки объявления выдаёт сообщение “Вы не ответили на контрольный вопрос!” Хотя модуль антиспам настроил, ввёл все вопросы, ключи, время… Может что-то я не так делаю? Можете подсказать?

  6. Здравствуйте. Собрал форму в редакторе страницы из ads-полей. стоит модуль антиспам и даже работает в типовой форме, но в моей не выводится. Вот форма http://111bashni.ru/dat-obyavlenie-uchastok

    Вот код:
    [AdsForm choice_category=off ads_base_category=362]

    Общие сведения

    Заголовок
    [ads_input name="a_title" type=”text” terms=$ emsg="Введите заголовок"]

    Город/район
    [ads_select name="a_region" terms=$ emsg="Выберите район." ]
    =>выберите район
    10=>Артем
    20=>Пригород
    30=>2-я Речка
    40=>Луговая
    50=>о.Русский
    60=>Тихая
    70=>Центр
    80=>Чуркин
    90=>Эгершельд
    [/ads_select]

    Удалить через
    [ads_input name="ads_lifetime" type=”text” size="4"] дней

    Текст объявления:
    [ads_textarea name="post_content" placeholder="Введите текст объявления в этом поле" rows="8"]

    Параметры

    Цена
    [ads_input name="a_price" type=”text” emsg="введите цену числом" size="12" terms="is_numeric($)" emsg="Введите цену."] руб.

    Цена за

    [ads_radio_area name="a_price_type"]
    1=>весь участок
    2=>сотку
    [/ads_radio_area]

    Площадь
    [ads_input name="a_s" type=”text” terms="is_numeric($)" emsg="Введите площадь числом." size="7"] соток

    Контактная информация

    Телефон

    [ads_input name="a_phone" type=”text” terms="strlen($)>6" emsg="Введите телефон"]

    Электропочта

    [ads_input name="ads_mail" type=”text” terms="strlen($)>6" emsg="введите адрес почты"]

    Положение участка на карте
    если хотите скрыть точный адрес – поставьте отметку отметку на ближайшей дороге или перекрестке
    [ads_google_map lat=43.38 lon=132.15 type="ROADMAP" zoom="12"]

    Фотографии
    [ads_file name=0]
    [ads_file name=1]
    [ads_file name=2]

    Проверка, что Вы человек.
    [ads_antispam]

    #a_brow button{
    margin:0 10px;
    }

    [ads_buttons]

    [/AdsForm]

  7. выше весь html съелся. Но суть понятна.

  8. Pavel:

    Здравствуйте, подскажите каким образом можно забанить пользователя, который спамит одним и тем же объявлением каждые 10 минут? Почтовый ящик каждый раз меняет при добавлении его в антиспам. Можно ли определить его ip, если он не оставляет комментариев? Спасибо.

  9. CS:

    Как бы все в порядке, но надоело видеть ошибки в php-errors.log типа:

    PHP Warning: extract() expects parameter 1 to be array, boolean given in ….\wp-content\plugins\ads-wordpress\ads_antispam.php on line 272
    а также, … on line 342, 514, 560, 702

    вообщем, почти везде, где используется функция extract($this->options);

    Хотя, функционально все работает корректно. (ну во всяком случае, я не вижу очевидных проблем)

    Заменил эту функцию во всех указанных местах на extract((array)$this->options);
    Ошибки исчезли. В работе ничего тоже не изменилось.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> [php]…[/php] [html]…[/html] [css]…[/css] [text]…[/text] [code]…[/code]