Антиспам

  • #1 Антиспам

    Администратор
    Сообщений: 517
    В последнее время достали спамеры. Пытаются добавить свои сайты в каталог ссылок. На предупреждения, написанные перед формой им конечно наплевать.
    Хоть и не публикуются эти ссылки автоматом(премодерация), но постоянно удалять просто надоело.
    Решил подключить своё раннее изобретение, которое работает безотказно в комментариях новостей и блогов.
    Если интересно, то:
    1. Есть в админке в меню Комментарии Настройки - вбиваем в поле Запрещённые слова все, что вам не нравится - от откровенного мата, до доменов, которые хотите заблокировать.
    2. открываем файл mod/link/add.php, ищем строку:
    <?phpif($e['title'] == 0 && $e['text'] == 0 && $e['url'] == 0){

    и перед ней вставляем такой код:
    <?php#/*NO SPAM*/
    if($url != ""){
    $bedwords = explode('|',$setting['combad']);
    for ($i = 0; $i < sizeof($bedwords); $i++)
    if (stripos($url, $bedwords[$i]) !== false){
      if($setting['ajax'] == 'yes'){
      print "<p class="errtitle">Вы уже в черном списке, но все равно - Спасибо!</p>";
      exit;
      }
      else{
      include(DNBASE."temp/head.php");
      header("Location: $url");
      include(DNBASE."temp/foot.php");
    }
    }
    }
    ###############
    if($text != ""){
    $bedwords = explode('|',$setting['combad']);
    for ($i = 0; $i < sizeof($bedwords); $i++)
    if (stripos($text, $bedwords[$i]) !== false){
      if($setting['ajax'] == 'yes'){
      include(DNBASE."temp/head.php");
      print "<p class="errtitle">Вы уже в черном списке, но все равно - Спасибо!</p>";
      include(DNBASE."temp/foot.php");
      exit;
      }
      else{
      include(DNBASE."temp/head.php");
      header("Location: $url");
      include(DNBASE."temp/foot.php");
    }
    }
    }
    #/*NO SPAM*/

    Первое условие блокирует публикацию запрещенных url, второе - запрещенные слова(мат, виагра и т.д.).
    Что получаем на выходе: при попытке добавить текст с описанием, включающим запрещенные вами слова -
    1. если включен в настройках аякс - вываливается сообщение
    2. если аякс выключен происходит редирект на сайт, добавленный спамером.
    Естественно ничего в БД не добавляется.
    Если тема интересна - юзайте, мне помогает.
    p.s. если кому интересно, то приведу решение для комментариев к новостям.
  • #2 Re: Антиспам

    Администратор
    Сообщений: 659
    Саш, зачем дублируешь код?
    напиши вместо этого
    <?php#/*NO SPAM*/
    if($url != ""){
    $bedwords = explode('|',$setting['combad']);
    и тд
    ###############
    if($text != ""){
    $bedwords = explode('|',$setting['combad']);
    и тд

    такую конструкцию
    <?php#/*NO SPAM*/
    if($url != "" || $url != ""){
    $bedwords = explode('|',$setting['combad']);
    for ($i = 0; $i < sizeof($bedwords); $i++)
    if (stripos($url, $bedwords[$i]) !== false){
      if($setting['ajax'] == 'yes'){
      print "<p class="errtitle">Вы уже в черном списке, но все равно - Спасибо!</p>";
      exit;
      }
      else{
      include(DNBASE."temp/head.php");
      header("Location: $url");
      include(DNBASE."temp/foot.php");
    }
    }
    }
    #/*NO SPAM*/
  • #3 Re: Антиспам

    Пользователь PRO
    Сообщений: 67
    Может не совсем в тему, но вспомнилось... Довольно давно для движка phpBB (это еще для двойки) был мод-антиспам, на мой взгляд очень сильная вещь. Принцип действия, уже знакомый вопрос-ответ, но к каждому вопросу можно было прикрепить картинку и плюс несколько вариантов ответов. На моей памяти не прорвался ни один бот, а капчу я вообще отключал. Например:


    Что они готовят? (Шашлык, шашлык, Шашлыки, шашлыки)

    Или


    Устройство для приготовления этого блюда называется? (Мангал, мангал)
  • #4 Re: Антиспам

    Администратор
    Сообщений: 517
    цитирую DimDimos

    if($url != "" || $url != "")


    Дим, ты видимо не заметил - в первом блоке кода мы парсим $url, а во втором - $text..
    Если бы в вот это условие -
    <?phpif (stripos($url, $bedwords[$i]) !== false){
    можно было каким-то макаром вставить и $text, то да, я б объединил.
  • #5 Re: Антиспам

    Администратор
    Сообщений: 659
    цитирую oldman

    Дим, ты видимо не заметил - в первом блоке кода мы парсим $url, а во втором - $text..


    Ага не заметил, но это нестрашно? Делай так,
    <?php#/*NO SPAM*/
    if($url != "" || $text != ""){
    $bedwords = explode('|',$setting['combad']);
    for ($i = 0; $i < sizeof($bedwords); $i++)
    if (stripos($url, $bedwords[$i]) !== false || stripos($text, $bedwords[$i]) !== false){
      if($setting['ajax'] == 'yes'){
      print "<p class="errtitle">Вы уже в черном списке, но все равно - Спасибо!</p>";
      exit;
      }
      else{
      include(DNBASE."temp/head.php");
      header("Location: $url");
      include(DNBASE."temp/foot.php");
    }
    }
    }
    #/*NO SPAM*/
 
Для создания сообщений Вам необходимо авторизоваться
Тему читают:
Пользователей 0, Гостей 1, Роботы 0
Календарь форума