Личный сайт Андрея Сабинина

Жалок тот, кто никогда не меняется. Но чтобы меняться — нужно кем-то быть.

Заглавная / Архив блога о разработке / Разработка / Защита e-mail адресов от спама
 
 

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

Альбер Камю, «Миф о Сизифе».

 

Защита e-mail адресов от спама

sap, 28-го июля 2008 года в 20:05

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


Спам был, спам есть и, в ближайшее время, будет. Поэтому защита от спама — довольно актуальная проблема. Я не буду рассказывать о спам-фильтрах — это задача почтовых провайдеров. Я расскажу о том, как защитить e-mail адрес при его написании.

Допустим, у вас есть сайт, и в разделе «Контактная информация» вам нужно написать свой e-mail адрес. Самый простой способ это сделать выглядит так:

<a href="mailto:mail@example.com">mail@example.com</a>

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

Первый способ — замена символа at

Самое банальное — заменить в адресе символ @ на название символа — at. Адрес в итоге выглядит так:

mail[at]example.com

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

Второй способ — метод CSS display: none

При использовании этого способа код выглядит примерно так:

<style type="text/css">
span.displaynone { display:none; }
</style>
mail@<span class="displaynone">null</span>example.com

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

Третий способ — кодирование ROT13

В этом способе адрес кодируется с помощью преобразования ROT13 (php-функция str_rot13), а затем расшифровывается с помощью javascript:

<script type="text/javascript"> document.write("<n uers="\"znvygb:<a" href="mailto:znvy@rknzcyr.pbz" ery=" \"absbyybj\"">".replace(/[a-zA-Z]/g, function(c){return String.fromCharCode ((c<="Z"?90:122)>=(cc=c.charCodeAt(0)+13)?c:c-26);})); </script>My mail</a>

Метод весьма хорош, но работает только в том случае, если у пользователя включена поддержка javascript. Идея выводить в этом случае просто адрес неудачна — ведь у ботов как раз поддержка javascript отсутствует. А заставлять пользователей обязательно включать javascript тоже нехорошо.

Четвертый способ — кодирование кодами символов

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

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#97;&#105;&#108;&#64;&#101; &#120;&#97;&#109;&#112;&#108; &#101;&#46;&#99;&#111;&#109;"> &#109;&#97;&#105;&#108;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99; &#111;&#109;</a>

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

Скрипт для защиты

Если вы выбрали способ, который вам подходит, предлагаю вам воспользоваться моим скриптом и защитить ваш адрес прямо сейчас:

 

 −7
+12 

Евгений, 28-го июля 2008 года в 20:22

По 3-му и 4-му способу: обратное кодирование ботами тоже реально.

ИМХО, пока спам-фильтры рулят.

sap, 28-го июля 2008 года в 20:45

Равно как и по первому, и по второму. Но большинство ботов этого делать не умеют, на это и расчет.

md5, 28-го июля 2008 года в 22:55

я фильтрую почту через яндекс

md5, 28-го июля 2008 года в 22:56

бред какой-то =)
резать так резать нормально надо =)
почикай плиз

sap, 29-го июля 2008 года в 00:09

Почикал :) Резку поправлю, спасибо, что потестил :)

Sneg*, 28-го июля 2008 года в 23:05

На хабре было почти тоже самое =)

sap, 29-го июля 2008 года в 00:11

Не было 4-го способа (ну и 1-го, но это ладно). Не было объяснения плюсов/минусов каждого способа. И не было скрипта для кодирования.

Dimitri, 5-го февраля 2009 года в 04:09

4-ый способ коряво код выдаёт...

sap, 5-го февраля 2009 года в 14:39

И в чем же проявляется корявость? Ничего подобного не заметил, хотя сам использую скрипт постоянно.