GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Убийство спама в The Bat!(33475)
Защита адресов e-mail на Web-страницах от спам-роботов(19060)
Защищаемся от спама в CommuniGate Pro(18866)
Жёсткая и мягкая фильтрация спама в The Bat!(18412)
Что такое спам и как с ним бороться(16922)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Спам » Защита адресов e-mail на Web-страницах от спам-роботов

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


Владимир Бакланов
vladimir-bak@yandex.ru

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) кодируется слдующим образом:

&#112;&#117;&#112;&#107;&#105;&#110;&#64;&#109;&#97;&#105;&#108;&#46;&#114;&#117;

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

&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#117;&#112;&#107;&#105;&#110;&#64;
&#109;&#97;&#105;&#108;&#46;&#114;&#117;

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

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#117;&#112;&#107;&#105;
&#110;&#64;&#109;&#97;&#105;&#108;&#46;&#114;&#117;">&#112;&#117;&#112;
&#107;&#105;&#110;&#64;&#109;&#97;&#105;&#108;&#46;&#114;&#117;</a>

или

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#117;&#112;
&#107;&#105;&#110;&#64;&#109;&#97;&#105;&#108;&#46;&#114;
&#117;">Вася Пупкин</a>

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

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

<html>
<head>
<title>Кодирование email-адреса</title>
<script language="JavaScript">
<!--
function EmailCode(email)
{
 if (email != "") {
	ecd = "";
	for (i = 0; i < email.length; i++) {
		ecd += "\&amp;#" + String(email.charCodeAt(i)) + ";";
	};
	document.write (email + "<br>" + ecd);
};
};

function yourEmailCode(form) {
	eml = form.yourEmail.value;
	EmailCode(eml);
};
//-->
</script>
</head>
<body>
<h2>Кодирование email-адреса</h2>
<p>String_1: <script>EmailCode("pupkin@mail.ru");</script></p>
<p>String_2: <script>EmailCode("mailto:pupkin@mail.ru");</script></p>
<form name="yourEmailAddres">
<p>Ваш e-mail:<br>
<input type="text" name="yourEmail">
<input type="button" name="button1" value="Закодировать" onClick="yourEmailCode(this.form)">
</form>
</body>
</html>

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

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

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

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

Пример 1.

<html>
<head>
<title>Генерация email-адреса</title>
<script language="JavaScript">
<!--
function email (login, serv)
{
	eml = login +  "@" + serv;
	document.write (eml);
}
//-->
</script>
</head>
<body>
<h2>Генерация email-адреса - пример 1.</h2>
<p>E-mail: <script>email("pupkin","mail.ru");</script></p>
</body>
</html>

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

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

Пример 2.
Создадим файл "email-2.html":

<html>
<head>
<title>Генерация email-адреса</title>
<script language="JavaScript">
<!--
function email (login, sc)
{
	var serv = new Array;
	serv[0] = "mail.ru";
	serv[1] = "rambler.ru";
	serv[2] = "yandex.ru";

	eml = login +  "@" + serv[sc];
	document.write (eml);
}
//-->
</script>
</head>
<body>
<h2> Генерация email-адреса - пример 2.</h2>
<p>E-mail 1: <script>email("pupkin",0);</script></p>
<p>E-mail 2: <script>email("vasya",2);</script></p>
<p>E-mail 3: <script>email("sidorov",1);</script></p>
</body>
</html>

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

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

Пример 3.
Файл "email-3.html":

<html>
<head>
<title>Генерация email-адреса</title>
<script language="JavaScript">
<!--
function email (login, sid)
{
	if (sid == 'r') sid = "rambler.ru";
	if (sid == 'y') sid = "yandex.ru";
	if (sid == 'm') sid = "mail.ru";

	eml = login +  "@" + sid;
	document.write (eml);
}
//-->
</script>
</head>
<body>
<h2> Генерация email-адреса - пример 3.</h2>
<p>E-mail 1: <script>email("pupkin","m");</script></p>
<p>E-mail 2: <script>email("vasya", "y");</script></p>
<p>E-mail 3: <script>email("sidorov", "r");</script></p>
</body>
</html>

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

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

Пример 4.
Файл "email-4.html":

<html>
<head>
<title>Генерация email-адреса</title>
<script language="JavaScript">
<!--
function email (login, sc)
{
 	var serv = new Array;
	serv[0] = "mail.ru";
	serv[1] = "rambler.ru";
	serv[2] = "yandex.ru";
	eml = login +  "@" + serv[sc];
	return eml;
}

function mylo (login, sc)
{
document.write (email(login, sc));
}

function namylo (login, sc, sub)
{
eml = "mailto:" + email(login, sc);
if (sub != "") eml += "?subject=" + sub;
window.location.href = eml;
}
//-->
</script>
</head>
<body>
<h2>Генерация email-адреса - пример 4.</h2>
<p>Эта ссылка создаст письмо без темы: <br>
<a href="javascript:namylo('pupkin',0,'');"><script>mylo('pupkin',0);</script></a>
<br> Эта ссылка создаст письмо с темой "Tema_Pupkin"<br>
<a href="javascript:namylo('pupkin',0,'Tema_Pupkin');">Вася Пупкин</a>
</p>
<p>Эта ссылка создаст письмо без темы: <br>
<a href="javascript:namylo('vasya',2,'');"><script>mylo('vasya',2);</script></a>
<br> Эта ссылка создаст письмо с темой "Халява"<br>
<a href="javascript:namylo('vasya',2,'Халява');">Вася Конорейкин</a>
</p>
<p>Эта ссылка создаст письмо без темы: <br>
<a href="javascript:namylo('sidorov',1,'');"><script>mylo('sidorov',1);</script></a>
<br> Эта ссылка создаст письмо с темой "Я_Дима_Сидоров"<br><a 
href="javascript:namylo('sidorov',1,'Я_Дима_Сидоров');">Дима Сидоров</a>
</body>
</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":

function email (login, sc)
{
 	var serv = new Array;
	serv[0] = "mail.ru";
	serv[1] = "rambler.ru";
	serv[2] = "yandex.ru";
	eml = login +  "@" + serv[sc];
	return eml;
}

function mylo (login, sc)
{
document.write (email(login, sc));
}

function namylo (login, sc, sub)
{
eml = "mailto:" + email(login, sc);
if (sub != "") eml += "?subject=" + sub;
window.location.href = eml;
}

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

Пример 5.
Файл "email-5.html":

<html>
<head>
<title>Скрытие адреса e-mail</title>
<script language="JavaScript" src="mylo.js"></script>
</head>
<body>
<h2> Генерация email-адреса - пример 5.</h2>
<p>Эта ссылка создаст письмо без темы: <br>
<a href="javascript:namylo('pupkin',0,'');"><script>mylo('pupkin',0);</script></a>
<br> Эта ссылка создаст письмо с темой "Tema_Pupkin"<br>
<a href="javascript:namylo('pupkin',0,'Tema_Pupkin');">Вася Пупкин</a>
</p>
</body>
</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="/go.html?url=http://www.server.ru/mylo.phtml?pupkin(dog)mail.ru">Вася Пупкин</a>

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

Мне нет смысла приводить в этой статье PHP-скрипт, так этот скрипт уже написал Spectator в своей статье No spam.php (как бороться со спамом).

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

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

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

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

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

 
05.10.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.