Защита адресов e-mail на Web-страницах от спам-роботов


Прислал: Владимир Бакланов [ 28.07.2003 @ 12:11 ]
Раздел:: [ Веб-технологии ]


Автор: Владимир Бакланов( mailto:vladimir-bak@yandex.ru?subject=На: Защита адресов e-mail на Web-страницах )

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

С появлением спама email-адрес перестал быть только средством коммуникации между людьми, но и стал объектом охоты за ним со стороны специалистов по email-рекламе и email-маркетингу. Экономическая целесообразность спама объясняется относительно небольшими затратами на массовую рассылку рекламных сообщений по электронной почте по сравнению с другими видами рекламы (чем, например, рассылка буклетов по обычной почте или реклама в газете или, тем более, на телевидении).

Спрос рождает предложение, и вот уже появились всякие Email Extractor’ы и другие спаммерские программы, которые день и ночь бороздят интернетовские просторы в выдирают из Web-страниц email-адреса юзеров. Эти адреса попадают в mail-базы, которые многократно продаются кому угодно, чтобы затем рекламщики (они же спаммеры) могли засыпать почтовые ящики пользователей бесчисленными рекламными сообщениями.

Вал спама поставил под сомнение публичность email-адреса, то есть его главное свойство. Поэтому пользователь вынужден с одной стороны публиковать свой адрес на сайтах и в форумах, с другой стороны – скрывать его, чтобы избежать сканирования спаммерскими роботами. Это явление даже получило название: мимикрия.

В данной статье рассматриваются разные способы маскировки email-адреса на Web-страницах. Всё изложенное здесь больше подходит для начинающих Web-мастеров, для тех, кто решил создать свой собственный сайт в Интернете.

Как известно, ссылка на адрес электронной почты в HTML имеет вид:

<a href=”mailto:pupkin@mail.ru”>pupkin@mail.ru</a>
или
<a href=”mailto:pupkin@mail.ru”>Вася Пупкин</a>

Первая используется, когда email-адрес нужно визуализировать на Web-странице. В общем виде её можно записать:

<a href=”String_1”>String_2</a>

Задача маскировки состоит в кодировании строк String_1 и String_2, чтобы спам-роботы не смогли обнаружить в этих строках email-адрес.

Существует 3 способа кодировани адреса:

  1. использование кодов символов Unicode;
  2. генерация email-адреса с помощью JavaScript.
  3. реконструкция ссылки с помощью серверных скриптовых языков (PHP, Perl и др).

Использование кодов символов Unicode.

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

Суть этого метода состоит в том, что адрес email (или его часть) заменяется символами Unicode.

Например в адресе pupkin@mail.ru можно заменить символ ‘@’:

pupkin&#64;mail.ru

Весь адрес pupkin@mail.ru (String_2) кодируется слдующим образом:

Словосочетание mailto:pupkin@mail.ru (строка String_1) кодируется так:

Ссылка, содержащая email-адрес будет выглядеть так:


или

Визуально такая ссылка не выглядит как ссылка на email, но всеми браузерами она будет отображаться корректно, при нажатии на неё будет запущена почтовая программа и создано новое письмо с адресом pupkin@mail.ru в поле “Кому:”.

Чтобы закодировать цепочку симоволов кодами Unicode можно воспользоваться HTML-страничкой с JavaScript’ом:

Скопируйте этот код в блокнот и сохраните в файл “emailcode.html”, а затем просмотрите его в любом браузере.

Генерация email-адреса с помощью JavaScript.

Это самый лучший метод (я сам им пользуюсь :-)). Спам-роботы не могут эмулировоть работу JavaScript, поэтому расшифровать вызовы к функциям JavaScript им не по зубам. На JavaScript можно написать сколь угодно сложный код, но для генерации “безопасной” ссылки достаточно написать несколько простых функций. E-mail состоит из нескольких частей:

pupkin – имя пользователя
@ – без комментариев
mail.ru – имя сервера

Вполне логично передать эти части (исключая @) в функцию, генерирующую email-адрес.

Пример 1.

Скопируем этот код в блокнот, сохраним в файл “email-1.html” и запустив его на выполнение. В окне браузера будет напечатан email-адрес, но пока не в виде ссылки. Этот код иллюстрирует простейшую функцию генерации email-адреса.

Простота кода в примере 1 является недостатком, так как вызов функции email("pupkin”,”mail.ru") очень легко преобразовать в email-адрес. От этого недостатка легко избавиться – нужно всего лишь как-то закодировать имя сервера.

Пример 2.

Создадим файл “email-2.html”:

В примере 2 все серверы занесены в массив. Например, сервер mail.ru имеет индекс 0, yandex.ru – индекс 2. Это достаточно удобно, так как на сайте может быть много email-алресов, на разных почтовых серверах. Вызов функции email("pupkin”,0) очень короткий и, кроме имени функции “email”, больше ничего не указывает на генерацию адреса. Имя же функции можно изменить, например, "abrakadabra" :-).

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

Пример 3.

Файл “email-3.html”:

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

Итак, функция генерации email-адреса есть, осталось написать функцию, генерирующую ссылку mailto:pupkin@mail.ru

Пример 4.

Файл “email-4.html”:

Это и есть то, что нам нужно – работающий скрипт, маскирующий emal.

Функция email (login, sc) – генерирует email по логину и индексу сервера;
функция mylo (login, sc) – пишет этот email на Web-страницу;
функция namylo (login, sc, sub) – генерирует гиперссылку вида mailto:pupkin@mail.ru.

Вызов этих функций из HTML-кода осуществляется следующим образом:

<a href="javascript:namylo('pupkin',0,'Tema_Pupkin');"><script>mylo('pupkin',0);</script></a>
или
<a href="javascript:namylo('pupkin',0,'Tema_Pupkin');">Вася Пупкин</a>

Заметим, что в функции namylo (login, sc, sub) имеется переменная sub. В неё записывается тема письма, если она нужна.

namylo('pupkin',0,'Тема сообщения')

Если тема не нужна , то пишем две одинарные кавычки рядом (т.е. пустая тема):

namylo('pupkin',0,'') – нет темы

Как правило, сайт состоит из нескольких страниц и скрипт включать в каждую страничку неэкономично. Гораздо выгоднее записать скрипт в отдельный файл, назовём его “mylo.js”:

Тогда Web-страница будет выглядеть таким образом:

Пример 5.

Файл “email-5.html”:

В каждую страничку сайта не забывайте включить строчку:

<script language="JavaScript" src="mylo.js"></script>

это при условии что скрипт и HTML-страница лежат в одном каталоге.

Если файл “mylo.js” лежит в корневой директории сайта, ссылка должна выглядеть так:

<script language="JavaScript" src="/mylo.js"></script>

а если в директории script, то так:

<script language="JavaScript" src="/script/mylo.js"></script>

Маскировка email-адресов с помощью JavaScript – это самый лучший вариант, так как язык JavaScript сейчас поддерживается всеми браузерами, а дешифровка адреса происходит на компьютере пользователя. Этот вариант не будет работать только у тех пользователей, которые отключили в своих браузерах JavaScript, но таких людей очень мало.

Реконструкция ссылки с помощью серверных скриптовых языков (PHP, Perl и др.).

Серверные скриптовые языки динамически собирают HTML-страничку из кусков кода на сервере и передают её браузеру пользователя. Это позволяет оформить ссылку на email-адрес как ссылку на Web-страницу, в которой в разобранном виде находится email-адрес. При нажатии на эту ссылку PHP-скрипт преобразует её на сервере в ссылку вида “mailto:”.

Например, на HTML-странице вместо стандартной

<a href=”mailto:pupkin@mail.ru”>Вася Пупкин</a>

стоит ссылка:

<a href=”//www.server.ru/mylo.phtml?pupkin(dog)mail.ru”>Вася Пупкин</a>

Серверный скрипт PHP, зашитый в страничку “mylo.phtml” обрабатывает ту её часть, что стоит после знака “?” и возвращает браузеру “нормальную” почтовую ссылку, а тот в свою очередь запускает почтовую программу.

Мне нет смысла приводить в этой статье PHP-скрипт, так этот скрипт уже написал Spectator ( http://webscript.ru///www.webscript.ru/profiles.php3?Author=Spectator&AuthorEmail=fcrpgngbe@znvy.eh&AuthorURL=http2%3A%2F%2Fspectator.ru ) в своей статье No spam.php (как бороться со спамом) ( http://webscript.ru///www.webscript.ru/stories.php3?story=01/05/24/5737529 ).

Можно, конечно, придумать более изощрённую конструкцию ссылки, например:

<a href=”//www.server.ru/mylo.phtml?login=pupkin&serv=mail&dom=ru”>Вася Пупкин</a>

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

Разумеется, защита email-адреса с помощью PHP-скрипта возможна, если Ваш хостинг поддерживает PHP. Насколько мне известно, поддержка PHP включена на всех платных хостингах, а также на некоторых бесплатных. Ещё одно преимущество этого метода – он не зависит от настроек браузера (ему. например, по барабану, включен JavaScript в браузере клиента или нет).

Надеюсь, что данная статья принесёт пользу не только желающим создать свою собственную страничку в Интернете, но и Вашим многочисленным партнёрам и посетителям, доверившим Вам свои адреса email. Избавьте их от неизбежности получать спам! Ведь Ваш сайт может стать кормушкой для спаммерских роботов, если email’ы будут лежать там открыто.