Еще один способ защиты от спама отображаемых на сайте емейлов

    Проблема защиты от спама емейлов, выложенных на сайте, уже наболевшая и давно затертая до дыр. Но я случайно нашел еще один способ борьбы.

    Можно, конечно, использовать следующие способы защиты:
    — Графическое изображение
    — Замену символов. Типа spam[at]must[dot]die
    — Вывод через js вида
    var login = 'spammer';
    var server = 'must.die';
    var email = login+'@'+server;
    var url = 'mailto:'+email;
    document.write('<a href="'+url+'">'+email+''
    );


    — можно использовать простенький вывод &#ANSI_код_символа; на php:
    $email = 'spammer@must.die';
    $url = 'mailto:spammer@must.die';
    $safe_email=$safe_url='';
    for($i=0; $i<strlen($email); $i++){
       $safe_email .= '&#'.ord($email{$i}).';';
    }
    for($i=0; $i<strlen($url); $i++){
       $safe_url .= '&#'.ord($url{$i}).';';
    }
    print "<a href='$safe_url'>$safe_email</a>";
    


    Когда для моего последнего проекта print-com.biz нужно было сделать защиту выкладываемого мыла от спама, то в поисках оного наткнулся на этот интересный сервис.
    Пошарив в коде, получим:
      function encode(email, text, tpl) {
        var t = tpl.replace(/{e}/g, email);
        var a = t.replace(/{text}/g, text);
        t = "";
        for (i = 0; i < a.length; i++) {
          if (a.charCodeAt(i) <= 127) {
            t += (String.fromCharCode(Math.floor(a.charCodeAt(i) / 16) + 65))
            t += (String.fromCharCode(a.charCodeAt(i) % 16 + 65));
          } else {
            t += a.charAt(i);
          }
        }
        var to = t;

        return t;
      }
      function decode(a) {
        var t = "";
        for (i = 0; i < a.length; i++) {
          t += (a.charCodeAt(i) <= 127) ?
            String.fromCharCode((a.charCodeAt(i) - 65 ) * 16 + (a.charCodeAt(++i) - 65))
            :
            a.charAt(i);
        }
        return t;
      }

    * This source code was highlighted with Source Code Highlighter.


    Возникает закономерный вопрос, а почему бы не реализовать нечто подобное, скажем, на php?
    И вот, что получилось.
    
    function encode_email($email, $text = null, $tpl = null)
    {
      if (empty($email)) return false;
      if ($tpl === null) $tpl = "<A HREF=\"mailto:{e}\">{text}</A>";
      if ($text === null) $text = $email;
      $t = str_replace('{e}', $email, $tpl);
      $a = str_replace('{text}', $text, $t);
      $result = '';
      for($i = 0; $i < strlen($a); $i++) {
        if (ord($a[$i]) <= 127) {
          $result .= chr(floor(ord($a[$i]) / 16) + 65)
          . (string)chr(ord($a[$i])%16 + 65);
        } else {
          $result .= (string)$a[$i];
        }
      }
      $code = "";
      $code .= "<script type=\"text/javascript\">"
      . "a=\"" . $result . "\";"
      . "for(i=0;i< a.length;i++){document.write((a.charCodeAt(i)<=127)?String.fromCharCode((a.charCodeAt(i)-65)*16+(a.charCodeAt(++i)-65)):a.charAt(i))}"
      . "</" . "script>"
      . "<noscript>".str_replace(array('@', '.'), array('©','·'), $email)."</noscript>";
    
      return $code;
    }
    




    В итого для мыла spam[at]must.die получается, что-то типа:
    DMEBCAEIFCEFEGDNCCGNGBGJGMHEGPDKHDHAGBGNEAGNHFHDHECOGEGJGFCCDOНаписатьCAписьмоCAбезCAспамаDMCPEBDO.
    А после декодирования средствами js мы видим нормальную ссылку на email.

    Так что пинайте, только не очень больно. Буду благодарен за любую критику по делу.
    Поделиться публикацией

    Комментарии 79

      +1
      Вполне себе вариант.
        +10
        слишком высока степерь риска. засветив однажды емайл от спама потом неотделаться практически никогда.
        А если кто сделает сборщика с поддержкой JS (это не так сложно)? а если он напишет сборщик именно для этого сайта? я не хочу рисковать.
        лучшая защита от спама — не вводить свой емейл куда попала, а владельцам сайтов нужно понимать что нельзя так подставлять своих пользователей и бережно хранить предоставленную им информацию.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Зачем?
              +4
              Штоб никто не догадался. (с)
                0
                А теперь скажи мне, что все это значит «дыры-фуфыры» и «ляка-маляка»? ©
              +1
              md5 — это не алгоритм шифрования, а алгоритм хеширования. Хеширование — необратимый процесс, поэтому для хранения емейлов не подходит.
                +5
                Вы наверное не поняли, но автор поста про «md5» так пошутил.
          • НЛО прилетело и опубликовало эту надпись здесь
              +6
              Он пытался :)
              –1
              я думаю это вообще неправильно — писать email на сайте; зачем? верите, что человеки будут его ручкой будет переписывать в тетрадку? если уж знаете email, поставьте форму для обратной связи
                0
                Эта задача возникла потому, что клиент хотел отобразить мыло на сайте, но так чтобы не было потом спама.
                  0
                  можно, конечно, заняться просвещением, но тогда наверное проще отобразить… :-)
                  +1
                  глупость
                  а если контактов десяток? десяток форм делать? форму с выбором контакта?

                  указание адреса — это естественное дело, для того он и придуман
                  наоборот, форма — это «непойми что», ушло — не ушло, кому ушло, категорически непонятно
                    0
                    > а если контактов десяток? десяток форм делать? форму с выбором контакта?

                    Нет, конечно. Наводите на имя человека мышкой — и вот вам всплывает форма. Здесь же Вы мне отлично ответили без всякого email.

                    Единственное, зачем вам мой email может пригодиться, так это для того, чтобы меня развиртуализовать. Ну и иногда увидеть, на кого я работаю.
                      +2
                      большинство здесь на gmail.com работают следуя вашей логике :)
                    –4
                    Форма, сама по себе, не спосет вас от спама.
                    +1
                    лучше уж картинкой выводить
                      0
                      боты умеют выполнять JS когда надо — продержится такой вариант не долго
                        –1
                        Ну а пока он будет держаться, думаю, мы придумаем, другие методы.
                          –2
                          Ага, и заменять на 100 проэктах на новый вариант?
                            0
                            А вы можете предложить другой более безопасный вариант?
                              0
                              Конечно. Перестать ерундой заниматься.
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Потому что алгоритмов сокрытия e-mail множество, но значительная часть базируется на идее, что собирающий бот просто не умеет js и тупо анализирует текст, который возвращает сервер.
                            • НЛО прилетело и опубликовало эту надпись здесь
                          +1
                          А в смарти уже есть готовая функция.
                            0
                            Не каждый пользуется smarty. Я, например, использовал этот метод на Sapid CMF, в которой свой шаблонизатор.
                            Можно, конечно, выдернуть функцию из смарти. Но это на крайний случай.
                            +4
                            Жалко у вас кармы не хватает, неплохо бы топик в Спам (Антиспам) перенести, имхо.

                            Товарищи — может поможем автору?
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  –2
                                  это результат функции.
                                  А почему так плохо?
                                    0
                                    Вы тоже не видите noscript? ;)
                                      0
                                      вижу, но этот вариант, можно поправить
                              • НЛО прилетело и опубликовало эту надпись здесь
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    0
                                    Интересный вариант. Но много времени потрачено, чтобы его увидеть.
                                    +6
                                    А почему-бы не использовать flash? Его вечные проблемы с индексацией поисковиками могли-бы послужить во благо на этот раз. Текст можно передавать в зашифрованном виде в параметры публикации или зашивать в swf. Линки будут работать как обычно. Можно выделить текст на странице или просто кликнуть. Работает даже под 6й флэш плеер (фу какая гадость). Не буду голословным и приведу простенький код на AS3:

                                    Ага не тут-то было. Не могу оформить красиво код, поэтому исходник положил в fzn7.ru/habr/Email/Email.as

                                    А посмотреть рабочий вариант можно тут fzn7.ru/habr/Email/Email.html
                                      0
                                      Кстати для особо параноидных личностей — swf можно генерировать прямо на сервере. Парсинг байткода доставит массу приятных минут боту и его хозяину.
                                        0
                                        К сожалению, я пока с флешем не очень дружу. Но стоит разобраться
                                        +1
                                        Адреса троянцы воруют из адресных книг почтовых клиентов. Если будет много таких адресных книг, то достаточно быстро адрес попадёт к спамерам, как его ни защищай. Так что защита javascript'ом поможет только на первое время, и создаст больше проблем тем кто не включает JS.

                                        Сокрытие email средствами javascript можно сделать проще. Взять кодовую строку — например, содержимое части страницы — title к примеру, и сделать операцию XOR с адресом, посимвольно — для шифровки. Для расшифровки — операцию XOR той же кодовой строки c зашифрованным Email.
                                          0
                                          Следует добавить, что на популярных почтовых ресурсах адреса подбираются еще и тупым перебором по словарям, можно адрес вообще нигде не светить, а спам все равно приходить начнет.

                                          Собственно поэтому адреса e-mail и не шифрую, без толку. А вот адреса spamtrap'ов на страницах, хоть чуть-чуть, но помогают.
                                            0
                                            А можно поподробнее про «адреса spamtrap'ов на страницах»? Это что такое?
                                              0
                                              Адреса-ловушки.

                                              Некоторые почтовые системы, к примеру Communigate Pro, предоставляют такую возможность. Если письмо приходит на такой адрес-ловушку, то оно не доходит и другим адресатам в системе и хост отправителя заносится в черный список на определенное время. Ну и SpamAssassin такими письмами хорошо в автоматическом режиме учить.
                                          0
                                          function decodeencode (email_, codestring){
                                              var d='';
                                              var email = (email_.indexOf('@')==-1)? decodeURI(email_): email_;
                                              for(var i=0; i < email.length; i++){
                                                  d += String.fromCharCode(email.charCodeAt(i) ^
                                                  codestring.charCodeAt(i % codestring.length));
                                              }
                                              return (email_.indexOf('@')==-1)? d:encodeURI(d);
                                          }
                                          var codestring='anytext';
                                          var email='email@example.com';
                                          document.writeln(email);
                                          document.writeln('<br>');
                                          var crypt=decodeencode(email, codestring);
                                          document.writeln(crypt);
                                          document.writeln('<br>');
                                          document.writeln(decodeencode(crypt, codestring));
                                          document.writeln('<br>');

                                            0
                                            Непомню на каком сайте видел следующую реализацию:
                                            email сделан в виде ссылки написать письмо, при нажатии на ссылку открывается новое окно с капчей, человек вводит капчу, и получает человеческую ссылку на email.

                                            минус вижу только один — чтобы добраться до адреса нужно сделать минимум 3 клика и раза 4-5 клацнуть по клавиатуре.
                                              0
                                              хабр клацнул теги,
                                              второе предложение следует читать примерно так

                                              email сделан в виде ссылки «написать письмо», при нажатии на ссылку…
                                                0
                                                небезызвестная ReCaptcha предлагает такой сервис
                                                +8
                                                фууууу бля! почта на мейл. ру (printcom@inbox.ru)!
                                                  0
                                                  Это не ко мне
                                                  +1
                                                  У меня свой вариант:
                                                  Если юзер зарегистрирован + имеет минимум 3 комментарий (или чего прочего) + рейтинг минимум 3
                                                  Вот тогда ему отображаются имейлы, а так знаки «*», например: ******@*****.***
                                                    +1
                                                    Пока способ не слишком засвечен — подойдет. По мере распространения эффективность может снизиться. Это как соревнование снаряда и брони.
                                                      –1
                                                      И никто не сказал, что способ плох тем, что работает только с включенным js. Печально…
                                                        +1
                                                        Параноя?
                                                        Веб уже давно перестал быть красиво разверстанными страничками
                                                          0
                                                          пока ещё мало джедаев, способных написать простейший скрипт без ошибок. вот хабр, только что не захотел посылать мой коммент. точнее послал, но чтобы это узнать пришлось обновить страницу.
                                                            0
                                                            Это значит что нужно отключать все скрипты? =)
                                                              0
                                                              нет, это значит, что скрипты могут несработать при определённых стечениях обстоятельств. или сработать не так как предполагалось.
                                                                0
                                                                А какое это имеет отношение к отключенным js?
                                                                  0
                                                                  скрипты могут быть «отключены» совершенно независимо от желаний пользователя.
                                                                    0
                                                                    А это вопрос того как разработчик отнесется к процессу
                                                                      0
                                                                      ошибок не совершает только тот, кто ничего не делает. а рабочий процесс мало зависит от самого разработчика, и больше от менеджмента.
                                                                      на «делать как следует» и «жопу порвать, но выяснить почему под браузером Х теряется переменная У» зачастую банально не хватает времени =(
                                                                    0
                                                                    Если скрипт не сработает, то при нормальном отношении к пользователю, он сможет увидеть хотя бы версию без js.
                                                                      0
                                                                      Про скрипт из сабжа я пока ничего не говорил — в целом я с такой методикой не согласен — можно обойти при желании, ну и самой собой — не всегда работает
                                                                      0
                                                                      Вот кстати пример с хабром просто в точку! Я уже третий коммент не могу отправить нормально — отправка с виду не происходит, хотя на деле всё ок. Зато на хабре есть возможность отправить сообщение без js.
                                                                        0
                                                                        Аналогично…
                                                                0
                                                                Во-первых, количество мобильных пользователей всё увеличивается. Я лишь на нескольких сайтах могу быть уверен, что скрипты там весят 1-2Кб и действительно полезны. В остальных случаях есть великолепная возможность погрузить сотни килобайт ненужной дряни. И потому js у меня выключен.

                                                                Во-вторых, даже в «большом» вебе существуют зловедные скрипты, принуждающие js отключать, хотя бы на время. Когда натыкаешься на «крутой сайтег с мега-скриптегами», забыв включить js обратно, видишь всю изнанку мастерства «профессионалов».

                                                                Доводы может глупы и мелочны, но я отношусь к тому ненулевому числу людей, считающих, что «навязчивый яваскрипт» не только неуважение к пользователю, но и банальный непрофессионализм.
                                                                  0
                                                                  А я привык к мини-опере, частично отрабатывающей скрипты на сервере
                                                                  Насчет зловредов — видимо я слишком редко попадаю на такие сайты
                                                                  А с последним абзацем согласен)
                                                                    0
                                                                    Даже на хабре была эпидемия.
                                                                    А вот с мини-оперой не знаком до сих пор, это моё большое упущение :( Хотя есть подозрения, что сервер не всегда правильно всё отработает. Но это на правах предположения.
                                                                      0
                                                                      Так оно и есть — обработка js там сделана на самом базовом уровне, позволяющем хотя бы отобразить частично верно
                                                              0
                                                              на Хабре вкратце упоминали про обфускацию средствами CSS (св-ва unicode-bidi и direction)
                                                              написал небольшую статью про защиту email от спама с помощью CSS
                                                                0
                                                                и руками перепечатывать емыл в почтовик?
                                                                  0
                                                                  да, вы правы.
                                                                  об этом я не подумал
                                                                0
                                                                Такой способ уже применяется: efind.ru/catalog/item/1660.html (E-Mail в правом блоке)
                                                                  0
                                                                  BEGINspammeifyoucan@gmail.comEND
                                                                    0
                                                                    такие решения работают, если они оригинальны, как только они становятся массовыми, придумывают варианты обхода. Но вариант вполне себе.
                                                                      0
                                                                      Обычно пишу

                                                                      <script>document.write('<a href=«mail'+'to:name%40dom'+ain.com»>'+'name'+'@domain.'+'com')< /script>

                                                                      Спам бывает, конечно, но в купе с джимейловским антиспамом почти не доставляет хлопот.
                                                                        0
                                                                        несколько реализаций одного метода blackman2003.narod.ru/programs/bee/ru.htm
                                                                          0
                                                                          Странно, как только зашёл — а там вирус.
                                                                          Такая реализация тоже мне попадалась на старой версии проекта, но меня не устроила
                                                                          +1
                                                                          Я как-то занимался раскруткой e-mail'ов как спам-ловушек. То, что собирается роботами на сайтах — капля в море. Вот потрошение троянами записных книг и торговля базами пользователей — это да.

                                                                          Заморачиваться стоит только для успокоения пользователей.

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

                                                                          Самое читаемое