Как скрыть email на сайте

Проблема заваливания спамом ящика, который вы ввели на каком-либо форуме со временем начинает проявляться все быстрее и быстрее. Например, если мы заглянем на форумы, сделанные на базе phpbb3, то заметим, что при просмотре профиля пользователя его email ничем не скрыт и немудрено написать робота, который прогулявшись по такому форму соберет все email в нужную базу, а дальше на эти адреса будут приходить письма с предложением увеличить член или купить виагры. Можно конечно организовать отправку писем прямо с сайта, на почту пользователям, но это может позволить спамерам помимо адресов ваших пользователей использовать еще и ваш почтовый сервер, да и иногда публикация email-адреса необходима. Скрыть адрес от роботов можно обфускаторами адресов, но можно и написать свою простую функцию на 10 строк и применять её где угодно.Итак, сама функция выглядит так:

function hideEmail($email)
{
$character_set = '+-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
$key = str_shuffle($character_set);
$cipher_text = '';
$id = 'e'.rand(1,999999999);
for ($i=0;$i<strlen($email);$i+=1) $cipher_text.= $key[strpos($character_set,$email[$i])];
$script = 'var a="'.$key.'";var b=a.split("").sort().join("");var c="'.$cipher_text.'";var d="";';
$script.= 'for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));';
$script.= 'document.getElementById("'.$id.'").innerHTML="<a href=\\"mailto:"+d+"\\">"+d+"</a>"';
$script = "eval(\"".str_replace(array("\\",'"'),array("\\\\",'\"'), $script)."\")";
$script = '<script type="text/javascript">/*<![CDATA[*/'.$script.'/*]]>*/</script>';
return '<span id="'.$id.'">[javascript protected email address]</span>'.$script;
}

Вызывается функция легко:

<?php echo hideEmail('myemail@mydomain.com'); ?>

В результате на странице в том месте html кода, где робот-ебобот ждет увидеть email, он видит примерно следующее:

<span id="e442173231">[javascript protected email address]</span><script type="text/javascript">/*<![CDATA[*/eval("var a=\"Tk-ZS7DhuaonNUmP@pjs8bg6v0IfV+i.E4JcXKOYMRLlQWt9_y1ewd5z2qCBF3rAHxG\";var b=a.split(\"\").sort().join(\"\");var c=\"dxWdRywUdxQzdRy5-lzd\";var d=\"\";for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));document.getElementById(\"e442173231\").innerHTML=\"<a href=\\\"mailto:\"+d+\"\\\">\"+d+\"</a>\"")/*]]>*/</script>

Внедрить этот код в phpbb3 будет просто, достаточно добавить саму функцию в php-файл, например в functions_dispaly.php, а в memberlist.php меняет строку:

'U_EMAIL'		=> $email,

на

'U_EMAIL'		=> hideEmail($email),

Далее, нам останется поправить шаблон memberlist_body.html: код приводить не буду ибо боюсь для каждой темы он уникален. Скажу лишь то, что нужно убрать {memberrow.U_EMAIL}, т.к. наша функция уже возвращает тэг A.

Спам — явление крайне негативное, помню случай, когда так сильно достали авторегистраторы, что человеку пришлось вспомнить, что такое регистрация доменов, и создать новый сайт ибо отбиваться от роботов было невыносимо.

Как скрыть email на сайте: 7 комментариев

  1. Здравствуйте!
    Я решил эту проблему другим способом. Почтовые адреса пользователей моего сайта, я вывожу в виде картинок. Делается это очень просто. Правда не знаю, смогут ли роботы распознать надпись на ней, если смогут то это печально.
    А Вам, спасибо за идею!


    С уважением,
    Павел

    • Ну как, с картинкой есть и неудобства: нельзя выделить и скопировать + трафика пусть и немного но кушает больше, обращение к серверу, а если еще и без кэширования, хотя javascript грузит браузер посетителя, так что, тут роли не играет — с картинкой тоже способ неплохой

  2. Что-то подобное есть в смарти. Даже несколько видов сокрытия: hex или javascript.
    {mailto address=»my@email.com» text=»web-junior» encode=»javascript»}
    При использовании javascript пишет на страничку через
    eval(unescape(«что-то невразумительное»))

    • Да, помнится, когда работал со смарти что-то такое видел, оттуда тоже можно без проблем выдрать код получается :).

  3. Чтобы раскусить этот способ нужно обучить бота компилировать джаваскрипт. Причем любой сложности

  4. Опять же… данный способ подойдет не каждому, с учетом того что JS может быть отключен, а если у вас бизнес?… а не просто блог и кому то надо обратиться к вам по нужному вопросу, а JavaScript отключен, мне например лень было б лезть в настройки и включать, мне легче найти другую контору…

Обсуждение закрыто.