The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Средство против роботов публикующих спам в формах
Избавится от автоматического поста и не напрягать посетителя с вводом
 графического кода позволит следующий алгоритм:

# Антиробот - против автопостов                 #
function antibot($text)
    {
    $text = substr($text, 1, -4);
    $sear = array("'1'i","'2'i","'3'i","'4'i","'5'i","'6'i","'7'i","'8'i","'9'i","'0'i");
    $repl = array("a","b","c","d","e","f","g","h","i","j");
    $text = preg_replace ($sear, $repl, $text);
    return $text;
    }
/*
    // вставляем анти-робоспам
    $antitime = time();
    $antiname = antibot($antitime);
    echo '<input name="'.$antiname.'" type="hidden" value="'.$antitime.'">';
    #----------
    // проверяем анти-робоспам
    $ver1time = time();
    $ver2time = time()-'9999';
    $ver1name = antibot($ver1time);
    $ver2name = antibot($ver2time);
    if ((strip_tags($_POST[$ver1name])<$ver1time and strip_tags($_POST[$ver1name])>$ver2time) or
        (strip_tags($_POST[$ver2name])<$ver1time and strip_tags($_POST[$ver2name])>$ver2time))
        {
        $antibot = '1';   // антибот даёт добро на post
        } else {
        $antibot = '-1';   // антибот запрещает этот post
        }
*/

PS: в функции "замена цифры на буквы" обязательно замените a-j на что-нибудь своё.
PPS: Код успешно работает около двух лет на нескольких сайтах.
 
09.07.2006 , Автор: Олег Светлов
Раздел:    Корень / Программисту и web-разработчику / PHP / Серверная часть и интерпретатор

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, qa, 08:37, 14/07/2006 [ответить] [смотреть все]
  • +/
    Скорее защита от обычных посетителей.
    Код не рабочий, алгоритм ужасен.

    Переменным c именами $ver1name и $ver2name просто не откуда взяться, когда $ver1time != $antitime || $ver2time != $antitime - 9999.

     
     
  • 2.2, qa, 08:39, 14/07/2006 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    Под переменными имелись в виду ключи в массиве _POST Т е _POST ver1name и ... весь текст скрыт [показать] [показать ветку]
     
  • 1.3, XAnder, 09:26, 14/07/2006 [ответить] [смотреть все]  
  • +/
    Принцип понятен и идея имеет право на существование. Но приведенная программа бесполезна при массовом использовании - спамеры быстро подстроятся под этот алгоритм. Научится "угадывать" буквы в функции antibot не составит особого труда.

    С другой стороны велосипед изобретать не надо было - достаточно воспользоваться какой-нибудь стандартной hash-функцией, например так:

    define("ANTIBOT_JUNK", "K-Hj/|786~*6g8&^&"); // случайный мусор - как рука на клаву ляжет :)
    ...
    function antibot($text)
    {
    $text = substr($text, 1, -4);
    return md5($text . ANTIBOT_JUNK);
    }

     
  • 1.4, Олег автор, 21:07, 19/07/2006 [ответить] [смотреть все]  
  • +/
    Главное - работает.
    А подбирать алгоритм под каждый не самый значительный сайт - с дуба рухнешь. Ием более, что усложнить оное - как два пальца...

    PS: кто не хочет - не пользует. кто хочет - пусть улучшает.

     
  • 1.5, Effect, 02:43, 20/07/2006 [ответить] [смотреть все]  
  • +/
    Этот код всеголиш немного усложнит задачу.
    ничего угадывать ненадо, надо просто пропарсить страницу и выдрать значение нужного поля.
    если копать в сторону WWW:Mehcanize (perl) через LWP немного больше телодвижений

    делается элементарно

    1. парсим страницу и ищем <input какой нам нужен
    2. заполняем поля
    3. отсылаем форму


    лично у меня создание бота против такой системы заняло бы минут 10-15 (наспор? ;-))

    но коненчо от скрипт-кидсов спасёт.

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

    например изменять имена полей (например шифровать а часть ключа передавать в хидден поле)

    либо повесить на крон скрипт который будет менять названия полей раз в день например.

    но пока боты не научились читать картинки - это самая эфективная защита от спама.

     
  • 1.6, Effect, 02:51, 20/07/2006 [ответить] [смотреть все]  
  • +/
    собсно с лёту

    $mech->get( "http://icanspam/here.omg" );
    (my $fieldname,$fieldvalue) = $mech->content() =~ /<some><stuff><input name="(.*)" value="(.*)"><we><can><find>/;

    $mech->field( "username", "spammer" );
    $mech->field( "text", "hahaha i can span hare too ;-()))" );
    $mech->field( $fieldname, $fieldvalue );
    $mech->submit();


    простите что нагадил =(
    очень много негатива, сорвался

     
  • 1.7, XAnder, 15:00, 20/07/2006 [ответить] [смотреть все]  
  • +/
    2Effect: Это само собой, тут не поспоришь. Бот, который перед тем как гадить, парсит страничку с формой - это зараза, с которой бороться трудно, потому что ведет себя почти как "живой" юзер.

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

    Не думаю, что это будет эффективно. Собссно, твой же бот уложит такую защиту без проблем.

    Но таких умных ботов пока не густо, в основном всякие тупые (мне попадались), против которых описанная защита в самый раз.

    Картинки, конечно же, дело хорошее, но напрягает. А САМАЯ эффективная защита - бдительный модератор :)

     
  • 1.8, XAnder, 15:07, 20/07/2006 [ответить] [смотреть все]  
  • +/
    Парлон, не доглядел. Твой бот не уложит - нужно немного усовершенствовать, а именно найти в форме еще элемент textarea, взять его имя и подставить сюда вместо "text":

    > $mech->field( "text", "hahaha i can span hare too ;-()))" );

    Аналогично с "username".

    Вот теперь уложит на ура ;)

     
  • 1.10, Effect, 16:26, 20/07/2006 [ответить] [смотреть все]  
  • +/
    както гнусно с кодировкой вышло - Это особенность модуля WWW Mechanize эта ст... весь текст скрыт [показать]
     
  • 1.11, Effect, 18:00, 20/07/2006 [ответить] [смотреть все]  
  • +/
    ну незнаю, пример input name sghgHJGHJsh name sjkjlKJKklks name sjkjai... весь текст скрыт [показать]
     
  • 1.12, XAnder, 19:47, 20/07/2006 [ответить] [смотреть все]  
  • +/
    2 Effect: [восхищенно] АБАЛДЕТЬ!!! Идеи - класс, закидоны - тоже :)

    Идея "супербота": бот берет страницу с формой, парсит ее полностью, с построением дерева DOM. Находит все формы, откидывает те, которые не содержат тегов <textarea>. Остальные - его клиенты. Честно заполняет все незаполненные по умолчанию поля формы, пихая свой гнусный спам в тот самый textarea. И отсылает форму.

    На name'ы полей не смотрит вообще, какие есть, такие и отправляет! О назначении полей догадывается исключительно по виду тегов.

    Весьма вероятно, что если народ начнет массово внедрять самописные антиботы, то такие "суперботы" непременно скоро появятся. А может и уже появились.

    Как с такими бороться без JavaScript, я не понял.

     
  • 1.13, Effect, 20:32, 20/07/2006 [ответить] [смотреть все]  
  • +/
    2XAnder ну да, люблю параноить по вечерам но всетаки, если перемешивать поля ... весь текст скрыт [показать]
     
     
  • 2.14, Олег автор, 23:54, 27/07/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    > либо повесить на крон скрипт который будет менять названия полей раз в день например
    В скрипте, собственно, название полей меняется по части time(), так вроде проще :), т.е. раз в несколько часов.

    Усложнение я подразумевал не в сторону хэшей - так и самому не трудно запутаться :). Гараздо эффективнее использовать java-scrips (код печатания скрипта рандомом чуть меняется + в соотсветсвии с тем же time() ). В таком случае робот-сборщик не отпарсит текст.
    Конечно, если прибавить разбитый на части хэш - это большой плюс к защите.

    Ещё раз повторю: для супер-пупер-ресурса такая защита слабовата. В приведённом мной первоначальном варианте - для малых сайтов. В доработанном в ветке - вполне годиться для для среднего и чуть выше уровня.

     
  • 1.15, kyprizel, 22:15, 09/08/2006 [ответить] [смотреть все]  
  • +/
    идея мертвая. тогда уж на js добавлять поле можно, но - боты уже и js понимают :)
     
  • 1.16, AnyKey, 14:53, 15/08/2006 [ответить] [смотреть все]  
  • +/
    Очень хочу посмотреть на бота, понимающего JS.
     
     
  • 2.19, kostich, 02:03, 12/09/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Этот бот называется IE. Заполнить формы из проги на VC очень элементарно, что бы вызвать клик надо конечно покурить доки, но это все решаемо.

    Можно даже сделать JS интерпретатор, т.е. встроить IE в какую-то прогу аля сервер, которая будет в IE грузить JS вместе с документом, а потом вызывать клик... ничего заполнять не надо по сути. Далее это всё прогоняем через простейшую проксю, которая подставит в нужные филды нужные значения.

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

    Под юнихами наверное просто, на базе какого-то епенсоурц браузера, не смотрел просто. Кликеры на базе IE видел... но там тоже не всё так просто, т.к. если форм на странице несколько, то надо как бы сообщать какую форму кликать, а если в JS проверяется заполнение текста, то скатываемся к первому абзацу.

     
  • 1.17, sekrett, 02:26, 21/08/2006 [ответить] [смотреть все]  
  • +/
    Я лично нашел более простое решение: добавил проверку всех полей на содержание трех слов: www, http и href, плюс кодирование тегов в lt, gt. Если спам, то обязательно ссылка на сайт, ИМХО.
     
  • 1.18, Серега, 08:19, 22/08/2006 [ответить] [смотреть все]  
  • +/
    У меня есть отработанная функция, которая экранирует нужные символы, заменяет на &-последовательности и режет по длине (это что бы от сообщения в одно слово весь сайт не разъехался). А на форме пользователя прошу ввести текущий день недели :) спам робота написать легко, но стоит ли заморачиваться... кроме того юзера можно попросить что-нибудь осмысленное написать (буква, слово)
     
  • 1.20, blackdog, 19:25, 26/09/2006 [ответить] [смотреть все]  
  • +/
    генерим число , пихаем в базу
    в hidden input id записи
    + картинка с числом для ввода руками
     
     
  • 2.23, Nikitian, 14:49, 10/07/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >генерим число , пихаем в базу
    >в hidden input id записи
    >+ картинка с числом для ввода руками


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

     
  • 1.21, Иван, 14:35, 30/09/2006 [ответить] [смотреть все]  
  • +/
    А почему картинку с цифрами не хотите?
    Самый простой и, имхо, действеный метод.

    В принципе, если чуть-чуть напрячься, можно и без
    гд обойтись: (первое что пришло в голову)
    1.Например заготовить символы заранее и обозвать их неосмысленно. (совсем пошло)
    2. (img src="genimg.php"...). а генимг собирает картинку из готовых кусков. (чуть веселее)
    Криво, но работать будет.

    Да мало ли фантазии. Главное задаться целью, а средств можно придумать много.

     
  • 1.22, Иван, 14:38, 30/09/2006 [ответить] [смотреть все]  
  • +/
    И вообще, чем больше разных средств на разных сайтах, тем сложнее писать универсального робота ;)
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList