The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Раздел полезных советов: Средство против роботов публикующих..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [Проследить за развитием треда]

"Раздел полезных советов: Средство против роботов публикующих..."  
Сообщение от auto_tips on 14-Июл-06, 08:37 
Избавится от автоматического поста и не напрягать посетителя с вводом
графического кода позволит следующий алгоритм:

# Антиробот - против автопостов                 #
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: Код успешно работает около двух лет на нескольких сайтах.

URL:
Обсуждается: http://www.opennet.dev/tips/info/1056.shtml

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Средство против роботов публикующих спам в формах"  
Сообщение от qa on 14-Июл-06, 08:37 
Скорее защита от обычных посетителей.
Код не рабочий, алгоритм ужасен.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Средство против роботов публикующих спам в формах"  
Сообщение от qa on 14-Июл-06, 08:39 
Под переменными имелись в виду ключи в массиве $_POST. Т.е. $_POST[$ver1name] и $_POST[$ver2name]
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Средство против роботов публикующих спам в формах"  
Сообщение от XAnder (ok) on 14-Июл-06, 09:26 
Принцип понятен и идея имеет право на существование. Но приведенная программа бесполезна при массовом использовании - спамеры быстро подстроятся под этот алгоритм. Научится "угадывать" буквы в функции antibot не составит особого труда.

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Средство против роботов публикующих спам в формах"  
Сообщение от Олег автор on 19-Июл-06, 21:07 
Главное - работает.
А подбирать алгоритм под каждый не самый значительный сайт - с дуба рухнешь. Ием более, что усложнить оное - как два пальца...

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Средство против роботов публикующих спам в формах"  
Сообщение от Effect email on 20-Июл-06, 02:43 
Этот код всеголиш немного усложнит задачу.
ничего угадывать ненадо, надо просто пропарсить страницу и выдрать значение нужного поля.
если копать в сторону WWW:Mehcanize (perl) через LWP немного больше телодвижений

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

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


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

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

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

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Средство против роботов публикующих спам в формах"  
Сообщение от Effect email on 20-Июл-06, 02:51 
собсно с лёту

$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();


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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Средство против роботов публикующих спам в формах"  
Сообщение от XAnder (ok) on 20-Июл-06, 15:00 
2Effect: Это само собой, тут не поспоришь. Бот, который перед тем как гадить, парсит страничку с формой - это зараза, с которой бороться трудно, потому что ведет себя почти как "живой" юзер.

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

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Средство против роботов публикующих спам в формах"  
Сообщение от XAnder (ok) on 20-Июл-06, 15:07 
Парлон, не доглядел. Твой бот не уложит - нужно немного усовершенствовать, а именно найти в форме еще элемент textarea, взять его имя и подставить сюда вместо "text":

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Средство против роботов публикующих спам в формах"  
Сообщение от Effect email on 20-Июл-06, 16:26 
както гнусно с кодировкой вышло ;-)
> $mech->field( "text", "hahaha i can span hare too ;-()))" );
Это особенность модуля WWW::Mechanize

эта строчка значит "найти поле с именем text и вписать туда ...."

имена этих полей не меняются же,на сколько я понял?

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


я говорил про вот про что:

давным давно вел ресурс с аккордами, и всякие гады любили тырить аккорды для своих сайтов


решение которое я пытался в тот момент сделать - изменение html документа, тоесть раз в nчасов скрипт изменял бы структуры документа
например <br><b> на <b><br>

<div><br> на <p> итд

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


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

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

или например через <table cо страшной структурой

ну еще можно фейк поля добавить к примеру


оснавная идея сделать текст код нечитаемым для бота

вообщем вариантов есть много ;-)


вчера задумался над созданием фрейморка на эту тему ;-)
если кому интересно пишите, можно попробовать склепать

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Средство против роботов публикующих спам в формах"  
Сообщение от Effect email on 20-Июл-06, 18:00 
>Не думаю, что это будет эффективно. Собссно, твой же бот уложит такую защиту без проблем.

ну незнаю, пример

<input name="sghgHJGHJsh"
..name="sjkjlKJKklks"
..name="sjkjaiioasas"
..name="skGHGsghjGSh"
..name="checksum" value="mMSjHSJhsjHJShjshjs"

типо поля формы
проверка типо
md5(field1 + field2 + field3 + field4 + salt) должна быть равна checksum

это раз, + перемешивать поля местами

тоесть отображается у нас в таком порядка

name
mail
subject

мы постоянно меняем из местами (тэги)

тоесть при каждой загрузке страници они будут в разном порядке


а отображать на экране через стайл, указывая координаты
(относительные, причем вынести в css во внешний файл, ну еще можно от разных элементов расчитывать. хм, уже параноя =))

а сами поля шифровать шлючом так:

имяполя_мусор
где мусор например тотже тайм
+ надо обязательно сделать проверку на время
ну или просто менять ключи раз в день\nчасов


если у кого есть идеи на тему антибота пишите, буду рад ;-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Средство против роботов публикующих спам в формах"  
Сообщение от XAnder (ok) on 20-Июл-06, 19:47 
2 Effect: [восхищенно] АБАЛДЕТЬ!!! Идеи - класс, закидоны - тоже :)

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

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Средство против роботов публикующих спам в формах"  
Сообщение от Effect email on 20-Июл-06, 20:32 
2XAnder
ну да, люблю параноить по вечерам =)

но всетаки, если перемешивать поля это намного усложнит задачу

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

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


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

а вот теперь посмотрим что получится когда спаммер будет добавлять гестбук себе в список

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


есле еме это нужно сильнее, начнет подстраиваться

тут он узнает что у нас еще добавляется мусор
вообщем и на этом этапе он может забыить.
пойдем дальше

он понял - названия полей меняются, и выдирать их бесполезно

заполняет через DOM, и тут возникают проблемы
все поля перепутываются, впринципе отличить верность заполнения достаточно просто (ну покрайней мере некотрых полей, email, url, zip итд)

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


+ еще добавить пяток полей - проверялок
юзер в них записать не может (просто не видно поле) а бот легко может попасться (допустим для заполнения нужно 3 поля а у нас есть 3 и еще 10 фейков)

и если ктото пытается что-то записать в фейк-поле - значит бот


при такой системе, бот должен быть примерно на уровне браузера (читать и понимать css, где какой тэг стоит)

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


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


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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Средство против роботов публикующих спам в формах"  
Сообщение от Олег автор on 27-Июл-06, 23:54 
> либо повесить на крон скрипт который будет менять названия полей раз в день например
В скрипте, собственно, название полей меняется по части time(), так вроде проще :), т.е. раз в несколько часов.

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Средство против роботов публикующих спам в формах"  
Сообщение от kyprizel (??) on 09-Авг-06, 22:15 
идея мертвая. тогда уж на js добавлять поле можно, но - боты уже и js понимают :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Средство против роботов публикующих спам в формах"  
Сообщение от AnyKey email on 15-Авг-06, 14:53 
Очень хочу посмотреть на бота, понимающего JS.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "Средство против роботов публикующих спам в формах"  
Сообщение от kostich email on 12-Сен-06, 02:03 
Этот бот называется IE. Заполнить формы из проги на VC очень элементарно, что бы вызвать клик надо конечно покурить доки, но это все решаемо.

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "Средство против роботов публикующих спам в формах"  
Сообщение от sekrett email on 21-Авг-06, 02:26 
Я лично нашел более простое решение: добавил проверку всех полей на содержание трех слов: www, http и href, плюс кодирование тегов в lt, gt. Если спам, то обязательно ссылка на сайт, ИМХО.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "Средство против роботов публикующих спам в формах"  
Сообщение от Серега email on 22-Авг-06, 08:19 
У меня есть отработанная функция, которая экранирует нужные символы, заменяет на &-последовательности и режет по длине (это что бы от сообщения в одно слово весь сайт не разъехался). А на форме пользователя прошу ввести текущий день недели :) спам робота написать легко, но стоит ли заморачиваться... кроме того юзера можно попросить что-нибудь осмысленное написать (буква, слово)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "Средство против роботов публикующих спам в формах"  
Сообщение от blackdog email on 26-Сен-06, 19:25 
генерим число , пихаем в базу
в hidden input id записи
+ картинка с числом для ввода руками
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "Средство против роботов публикующих спам в формах"  
Сообщение от Nikitian email on 10-Июл-07, 14:49 
>генерим число , пихаем в базу
>в hidden input id записи
>+ картинка с числом для ввода руками


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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "Средство против роботов публикующих спам в формах"  
Сообщение от Иван (??) on 30-Сен-06, 14:35 
А почему картинку с цифрами не хотите?
Самый простой и, имхо, действеный метод.

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "Средство против роботов публикующих спам в формах"  
Сообщение от Иван (??) on 30-Сен-06, 14:38 
И вообще, чем больше разных средств на разных сайтах, тем сложнее писать универсального робота ;)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру