Защита от роботов создающих spam-листы

white phoenix

Новичок
Защита от роботов создающих spam-листы

Решил накануне потреннироваться в регулярных выражениях, написал функцию которая выбирает из текста email'ы, получилась очень хорошая. Затем для тестирования написал робота, который "ходит" по страничкам и собирает email'ы в MySQL-таблицу. Натравил скрипт на php.net, подождал минуту и офигел, 615 адресов. Потом натравил на jobru и офигел еще больше, а если еще на широкий канал... У кого-то есть мысли по поводу защиты от таких штуковин? Суммарно скрипт весит 4 кб лишним, и ничего сложного нет. Вот что думаю по этому поводу я:
1. Написание адреса на картинке.
+ Не так легко вскрыть.
- Нагрузка на сервер, нелегкая реализация механизма замены.
2. Добавление строк типа 'NOSPAM' в разные места. Типа '[email protected]'
+ Нет дополнительной нагрузки на сервер.
- Поддается анализу.

Если не затруднит, выскажите идеи. Спасибо.
 

white phoenix

Новичок
Да, как вариант, но это не решение, т.к. применяем нечто вроде:
PHP:
$string = preg_replace("~eval\(\s*unescape\((.*)\)\)~sie",'urldecode("$1")',$string);
и данные снова наши.
 

zerkms

TDD infected
Команда форума
при таком взгляде на жизнь -
"Добавление строк типа 'NOSPAM' в разные места. "
тоже не решение ибо рега и под него переписывается лёгким движением руки

может тогда вообще не писать емайлы либо использовать интерфейс сайта для отправления оных
 

white phoenix

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

zerkms

TDD infected
Команда форума
ну тогда наверно тебе проще генерить картинки с майлами

ps: генерить естественно 1 раз - при вводе/изменении
 

zarus

Хитрожопый макак
>> Может тогда вообще не писать емайлы либо использовать интерфейс сайта для отправления оных.
>> Нет, адреса писать все-таки надо.
Вы уж определитесь, вам шашечки или ехать?
 

HEm

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

кстати, не вспомнить ли нам старую забаву? http://php.spb.ru/php/fake_mail.php
 

tf

крылья рулят
в тему только что наткнулся меняя один сайт
<a href=mailto:[email protected]
onMouseOver="this.href='mail'+'to:'+'mega'+'@'+'domain'+'.ru'" style='padding:0;text-align:center;color:#000;font-size:12px;line-height:100%;letter-spacing:-1px; font-family: Comic Sans Ms; font-weight:bold' >написать письмо</a>
 

Гравицапа

elbirret elcno
абсолютной защиты не существует - это всем известно
для нормального уровня вполне должно хватить того как реализовано в смарти или в посте выше

З.Ы. я делал с помощью картинок
 
я вот так защищаюсь:
<a href="javascript:mailtor('moc.niamod@nimda')" >[email protected]</a>

function mailtor(em) {
window.location="mailto:" + em.split('').reverse().join('');
}

насчет того что можно раскодировать - ИМХО не имеет смысла. больше потратишь времени на написание алгоритмов, гораздо проще натравить робота на какой-нить жирный сайт или каталог и за тоже время он найдет в сотни раз больше чистых некодированных мейлов.
 

Линка

Новичок
white phoenix
ну а к примеру такой адрес
mehovhichka(tra-lya-lya)rambler.ru
робот зацепит или пройдет ?
или такой
m e h o v h i c h k a @ r a m b l e r . r u
человек то догадается пробелы убрать:)
 

Woland

Guest
Вариант с картинкой помимо повышенной нагрузки на железку плох еще слишком низкой юзабилити. Лично я, сталкнувнись с таким решением проблемы, ни в жизни не буду писать на это мыло, ибо просто в ломы будет перенабивать емайл себе в Bat. Были уже преценденты. Так что это защита не только от роботов, но и от людей.
Потому катят только всеразличные извраты на javascript. Вариантов вагоны...
Да и сама постановка задачи скрытия мыла по-моему некорректна в тематике сайтов. Это уже задача майл-сервера - грамотно фильтровать спам. А мылы все не запрячешь ни в жисть... Не выдернут с одного сайта, выдернут с другого, где ты зарегистрировался и где такой защиты нет.
 

zarus

Хитрожопый макак
Автор оригинала: Линка
white phoenix
ну а к примеру такой адрес
mehovhichka(tra-lya-lya)rambler.ru
робот зацепит или пройдет ?
или такой
m e h o v h i c h k a @ r a m b l e r . r u
человек то догадается пробелы убрать:)
1. Роботов тоже не роботы создают. Можно создать список ключевых e-mail серверов и отдельной функцией проверять наличие этих слов, и при этом анализировать, почему не были найдены мылы, хотя слово встречалось, потом модифицировать регэкспы
2. Вариант решается с помощью модификации регэкспа и п.1.
([^\s][^@]*)@([^\.]*)\.(.*)
Ну или как-то так
 

white phoenix

Новичок
Линка
Ночью мне не спалось и я решил переписать многое на более абстрактный от формата вариант.
> mehovhichka(tra-lya-lya)rambler.ru
"Зацепит" конечно.
> m e h o v h i c h k a @ r a m b l e r . r u
Аналогично. Ты подумала что я совсем лентяй? :)
Woland
Мы рассматриваем конкретную задачу, рассуждения на тему того что это задача smtp-сервера и только его, мне кажутся бессмыленными.

По поводу JavaScript. Пришла в голову замечательная идея, кодировать скрипт встроенным encoder'ом, который конечно не претендует на защиту исходника, но вполне сгодится для его искажения.
 

Линка

Новичок
zarus
почему не были найдены мылы, хотя слово встречалось
mehovhichka(tra-lya-lya)rambler.ru
какое в этом вариане слово встречалась?
Согласись что при написании через пробел или точку 99% роботов как адрес не посчитает эту конструкцию
white phoenix
вот твой робот и будет этим 1%:)
 

white phoenix

Новичок
zarus
> 1.
Да, я натравил бота на php.net и посмотрел какие формы записи он упустил (специально сделал рег. выражение для поиска упущенных результатов). А потом добавил нужные правила в основное.
> 2.
Вот моё выражение (слегка подправленое чтобы спамеры не использовали).
PHP:
// код испорчен.
 $nearSep = '[[\]\(\)_]';
 $pattern =
'~'.
/* Mailbox */ '[a-z0-9_\-\.]+'.
/* At	   */ '((?:(?-i)(?:'.strtoupper($imp_at).'))|(?:\s*'.$nearSep.'*(?:(?:\s*@\s*|(?:(?:\s+|(?<='.$nearSep.'))(?:'.implode('|',$at).')(?:\s+|'.$nearSep.'+)))))'.$nearSep.'*)\s*)'.
/* Domain  */ '[a-z0-9_\-]+\s*'. 
/* Dots	   */ '(?:'.$nearSep.'*(?:\s*\.\s*|(?:\s+|(?<!'.$nearSep.'))(?:'.$imp_dot.')(?:\s+|'.$nearSep.'+))'.$nearSep.'*'.$h_space.'[a-z0-9]+)+'.
'~ix';
Линка
> какое в этом вариане слово встречалась?
'.$nearSep.'+([^\]\(\)_]*)'.$nearSep.'+ вот например такое слово.
Согласен, обычно только примитивные форматы определяют, т.к. ленивые люди очень.
 

Spear

почемучка
у меня такая идея:
помимо защиты имейлов, нужно напакостить спамерам так:
1. Узнать, просматривается ли страница ботом (это самое сложное, в этом у меня проблема)
если да - вывести где-то в основном коде (ведь это может быть не только спам-бот а и поисковик) ещё ссылку типо
http://site.ru/killbot/
на которой случайны образом будет генерироваться текст, в теле которого будут генерировтаься рендомные имейл адреса.
Такой код уже есть.
Если ещё кто сможет помочь с вычисленем - бот ли это смотрит страницу, будет вообще супер.
Таким образом спаммер будет поулучать сотни (тысячи) недействующих имейл адресов, засоряя себе базу. Пару раз напорятся на такое дело, а в след. раз сами не захотят сканить сайт.
 
Сверху