Статьи о почте

Новости

Все новости

Разное в мире IT

Все заметки

Промышленные альпинисты - фасадные работы.
mailinfo.ru - Статьи о почте

No spam.php (как бороться со спамом)

Прислал(а) Дмитрий Смирнов aka Spectator [11 января 2002]

раздел: [Исходники]

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны, знает каждый – почтовые фильтры, всякие программы, отсылающие спамеру ответ, мол, адрес такой не найден и прочее... Базы данных спамеры составляют очень просто – натравливают специальные программы на различные сайты, в основном туда, где много email-адресов – форумы, гостевые, и прочее. Дальше – дело техники: программы просматривают html-код, ищут там mailto: и заносят почтовый адрес в свою базу. Бороться с этим можно самому, при публикации своего мыла – писать его, например, spectator[sobaka]mail.ru. Тот, кому надо, исправит адрес при написании письма сам.

Однако есть как минимум два способа, как при написании гостевых книг (или форумов) сделать защиту от спамеров. Первый – это не публиковать email вообще, а вместо его ставить ссылку на страницу с формой, с помощью которой желающий, не зная адреса, сможет отправить письмо соответствующему человеку. С одной стороны – удобно. Так сделано, например, на webscript.ru. С другой – не совсем, потому что многие предпочитают не пользоваться формами, а отправить письмо через любимый bat! Да и вообще, неизвестно еще куда отправит ваше письмо данная форма. Шучу, конечно, но недостатки этого метода, как и достоинства, очевидны.

«Но есть способ лучше!». Не абсолютно лучше, но в некоторых случаях явно лучше. Заключается он в том, чтобы публиковать ссылки на email адреса вот в таком виде: click here. Желающие могут кликнуть и посмотреть, что это работает. Программы, «выдирающие» адреса, ничего на найдут.

Кликнули? Работает?


А теперь – как. Первая часть скрипта, которая заменяет в тексте адреса на такие ссылки простая, даже нет смысла ее приводить. Если что – то у меня в отзывах стоит примерно следующее:

$nospam= str_replace (\'@\',\'[dog]\',$mail);
echo (\'\');

Вторая часть – это, собственно, скрипт nospam.php3. Состоит он ровно из двух строк:

$url = str_replace (\'[dog]\',\'@\',urldecode($QUERY_STRING));
header(\'Location: mailto:$url\');
?>

Меняем [dog] на @ обратно и шлем в хедере mailto: и адрес.

При этом ничего в браузер не грузится и текущая страница остается нетронутой. (Правда, мне тут уже сообщили, что в IE 5.5 это не так...).


Вот, собственно, и все. Осложним жизнь спамерам. Вместо [dog] можно использовать все, что угодно, на что хватит вашего воображения.


З.Ы. : о баге в IE 5.5. Он при клике на эту ссылку открывает пустое окно. Почтовая программа, правда, тоже запускается, но все-таки... Пустое окно – нехорошо...

Давайте посмотрим... А теперь эта ссылка в IE 5.5 – работает? Click here.

Да?

Сделано – просто. Но все равно через... Вставляем куда-нибудь пустой iframe:

Ту часть, которая выводит ссылки, пишем примерно вот так:

$nospam= str_replace (\'@\',\'[dog]\',$mail);
echo (\'if (eregi ("MSIE 5", $HTTP_USER_AGENT)) {echo (\' target=mail\'); }
echo (\'>\');

Для того, чтобы если у человека IE 5 и выше – ссылки шли в этот пустой iframe...

Вроде работает... Только вот такой простое решение превратилось в какую-то бяку...

Есть еще один способ бороться с роботами, собирающими email-адреса со страниц. Я даже удивлен, почему никто про него не вспомнил. Придется вспомнить мне.

JavaScript.

Как вы знаете (если знаете), javascript – это язык, который выполняется на стороне браузера, а не на стороне сервера, как, например, php. Поэтому сам скрипт находится в теле html-документа. На javascript\'е есть такая функция – document.write(), которая выводит нужный текст в нужном месте. Например:

Результат работы скрипта: .

Но если мы заглянем в source этой страницы, то мы увидим не просто «Это текст», а яваскрипт, приведенный выше. Конечно, писать что-то вроде document.write(\'mailto:spectator@mail.ru\') смысла нет, потому что робот все равно выцепит адрес, поэтому делаем примерно вот так:

Результат работы скрипта:

%40 – это то же самое, что и «@». Чтобы никто не догадался...

Тем не менее, если быть параноиком, можно предположить, что робот, собирающий адреса, «понимает» document.write. То, что он целиком понимает javascript – это навряд ли, повторюсь еще раз – javascript испольняется браузером в момент вывода html-я, однако если смотреть в «исходник» страницы (а именно туда роботы и смотрят), то там будет «запутанный» яваскрипт.

Тем не менее, запутать можно сильней. Для этого просто введем переменную. И назовем ее mailto, чтобы еще больше запутать.

Работает вот так:

Осталось вспомнить про тех, у кого javascript отключен. Есть и такие оригиналы.



Дальше – дело техники. Как вставить в форум, гостевую книгу или еще куда-нибудь пару строчек на php, perl\'е и прочем (зависит от вашего вкуса), чтобы скрипт сам из простого email-адреса делал вот такой java-скрипт, вы разберетесь сами...


From: Konstantin Bekreyev (Ulyanovsk State University)
To: Spectator

Добрый день

Я конечно не особый специалист, но почему бы проблему не решать вот так? :)

$usermail=\'user@domain.com\';
for ($i=0;$i{ $mailto.="&#".ord($usermail[$i])."; }
echo \'
$mailto\';
?>

идея понятна? :) правда может можно и оптимизировать наверно...

IMHO мало кто будет по такой подстроке искать... :> А проблем с наличием или отсутствием javascript не будет...

---
With best regards, Konstantin V. Bekreyev
Ulyanovsk State University, Russia


В общем, идея в том, чтобы переводить символы в их «цифровые» аналоги, например это mailto: – то же самое, что и «mailto:»

Способ тоже хороший, только вот преобразовать их обратно в «нормальные» символы гораздо легче, чем javascript... Конечно, наверняка не все спамовые роботы это могут, то все-таки... «Продвинутые» – точно могут.


И еще один способ, весьма забавный:

onMouseOver="this.href=\'mail\'+\'to:\'+\'spectator\'+\'@\'+\'mail\'+\'.ru\'">E-Mail

Работает вот так: E-Mail