Лучший способ скрыть адрес электронной почты на сайте?

Я провел последние несколько дней, работая над обновлением моего личного веб-сайта. URL моего личного веб-сайта (мое имя).(моя фамилия).com, так как моя фамилия довольно необычная, и мне посчастливилось подобрать доменное имя. Мой адрес электронной почты(мое имя)@(моя фамилия).com. Так что на самом деле, когда дело доходит до угадывания, это не очень сложно.

в любом случае, я хочу интегрировать ссылку mailto: на мой сайт, чтобы люди могли связаться со мной. И, несмотря на мой e-mail адрес не очень трудно догадаться, я бы не хотел, чтобы его собирали спам-боты, которые просто сканируют веб-сайты для шаблонов адресов электронной почты и добавляют их в свою базу данных.

каков наилучший способ для меня запутать мой адрес электронной почты, предпочтительно в форме ссылки? Методы, о которых я знаю:

<a href="mailto:x@y.com">e-mail me</a>

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

<img src="images/e-mail.png" />

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

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

25 ответов


я кодирую символы как объекты HTML (как то так). Он не требует, чтобы JS был включен и, похоже, остановил большую часть спама. Я полагаю, что умный бот все еще может собрать его, но у меня не было никаких проблем.


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


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

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


reCAPTCHA предлагает простой служба запутывания электронной почты. Вам не нужно настраивать учетную запись и вы можете начать использовать ее немедленно. Вы можете использовать сервис как ссылку или как всплывающее окно.

после того, как captcha решена, ваш адрес электронной почты отображается как href/mailto, так что он может быть нажат / затем пользователями, которые настроили свои почтовые клиенты для работы со своими браузерами.


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

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

люди, кажется, могут чтобы понять это просто отлично, так как я получаю законную электронную почту все время. Иногда лучшие решения не требуют написания кода. :)


видимо использование CSS для изменения направления вашего текста работает довольно хорошо. Эта ссылка также имеет тест на кучу других методов обфускации.

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


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


легкий способ скрыть href якоря является base64-кодировать его:

> btoa('mailto:email@example.com')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

а затем включите его жестко:

<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>

или динамически на стороне сервера, например в PHP:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')">E-Mail</a>

в сочетании с реверсией строки это может быть довольно спам-сохранить:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("email@example.com") ?></a>

вы можете делать то, что Google делает в коде Google (и группах). Отображение par tof электронной почты и кликабельной части ("..."). Щелчок, который указывает, что вы хотите знать электронное письмо, и вас попросят заполнить капчу. После этого электронная почта (и другие?) видны.


один веб-сайт, который я поддерживаю, использует несколько упрощенные средства JavaScript (надеюсь), сохраняя спам-ботов.

ссылки по электронной почте вызывают функцию JS:

function sendEmail(name, domain) {
    location.href = 'mailto:' + name + '@' + domain;
}

чтобы убедиться, что только пользователи с включенным JS могут видеть ссылку, напишите их с этим:

function writeEmailLink(realName, name, domain) {
    document.write('<a href="javascript:sendEmail(\''
      + name + '\', \'' + domain + '\')">');
    document.write(realName);
    document.write('</a>');
}   

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


Я использую JavaScript obfuscation, взгляните на это, например:

http://www.jottings.com/obfuscator/


мой на самом деле просто:

<h3 id="email">hello@gmail.com</h3><!-- add a fake email -->


    $(document).ready(function(){
//my email in reverse :)
            var s = 'moc.elibomajninbew@htiek';
            var e = s.split("").reverse().join("");
            $('#email').html('<a href="mailto:'+e+'">'+e+'</a>');
    });

как сказано выше, я также использую JavaScript obfuscation из jottings website.

веб-страница генерирует некоторый JavaScript,который может быть улучшен. The mailto: текстовая строка находится в ясном и идентифицируемом роботами (которые могут обнаружить это и ненавязчиво эту строку), но если один входит в jottings.com веб-страница адрес электронной почты формы mailto:addr@site.tld вместо addr@site.tld а затем удаляет текст mailto: из созданного JavaScript, внезапно появляется JavaScript, который не имеет никакого отношения к электронной почте - просто случайный JavaScript, которого полно в интернете. Можно улучшить это еще больше, избавившись от текста ссылки - Я заменил свой на изображение моего адреса электронной почты, которое находится в довольно неясном шрифте. Тогда на всякий случай этот метод jottings.com становится популярным, я рандомизировал имена переменных в выходном JavaScript, чтобы роботу было трудно обнаружить экземпляр сгенерированных записей код JavaScript.

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

пример может сделать это немного более ясным. Я использовал Jottings Obfuscator по ссылке выше, чтобы скрыть mailto:foo@bar.com (обратите внимание, что я обманываю первоначальное намерение веб-сайта jottings, введя строку mailto:foo@bar.com вместо foo@bar.com) С текстом "отправить мне по электронной почте", который превратился в заметки в этот Javascript:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "3A1OTJ:rJJ@VAK.GJ3"
  key = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else { 
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
document.write("<a href='mailto:"+link+"'>Send Me Email</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>

после того, как я получу это обратно, я вставляю его в Редактор и:

  1. удалить mailto:
  2. заменить текст ссылки указателем на изображение моего адреса электронной почты
  3. переименовать все переменные
  4. замените раздел "noscript" другой ссылкой на изображение адреса электронной почты

я:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption kkeoy feature by Andrew Moulden, Site Engineering Ltd
// This kudzu is freeware provided these four comment lines remain intact
// A wizard to generate this kudzu is at http://www.jottings.com/obfuscator/
{ kudzu = "3A1OTJ:rJJ@VAK.GJ3"
  kkeoy = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=kudzu.length
  klonk=""
  for (variter=0; variter<kudzu.length; variter++) {
    if (kkeoy.indexOf(kudzu.charAt(variter))==-1) {
      lutu = kudzu.charAt(variter)
      klonk += (lutu)
    }
    else {
      lutu = (kkeoy.indexOf(kudzu.charAt(variter))-shift+kkeoy.length) % kkeoy.length
      klonk += (kkeoy.charAt(lutu))
    }
  }
document.write("<a href='"+klonk+"'><img src='contactaddressimage.png' alt='Send Me Email' border='0' height='62' width='240'></a>")
}
//-->
</script>
<noscript>
    <img src="contactaddressimage.png" border="0" height="62" width="240">
    <font face="Arial" size="3"><br>&nbsp;</font></p>
</noscript>

Я не знаю, насколько хорошо это будет работать. Не могли бы вы оставить свой адрес электронной почты и загрузить его с помощью вызова AJAX после завершения загрузки страницы. Не уверен, что спам-боты могут забрать измененный HTML или если они достаточно умны, чтобы слушать другой HTTP-трафик, чтобы попытаться выбрать адреса электронной почты, или если они просто сканируют страницу, как она получена в первый раз.


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

тремя лучшими способами являются:

  1. изменение направления кода с помощью CSS
  2. использование дисплея CSS: нет
  3. шифрования алгоритма ROT13

нюанс-это было опубликовано два года назад. Спам-боты могли бы стать умнее.


другим подходом может быть использование JavaScript-фреймворка и привязка данных / модели к HTML-элементам. В случае AngularJS элементы HTML будут записываться как:

<a href="mailto:{{contactEmail}}"><span>{{contactEmail}}</span></a>

привязка интерполяции {{data}} использует переменную области, содержащую фактическое значение электронной почты. Кроме того, можно также использовать фильтр, который обрабатывает декодирование электронной почты следующим образом:

<a href="mailto:{{contactEmail | decode}}"><span>{{contactEmail | decode}}</span></a>

преимущества заключаются в том, как написан HTML. Недостатком является то, что он требуется поддержка сценариев, для которых некоторые могут быть no no.

просто еще один подход.


решение вызова Ajax

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

HTML-код

<a class="obfmail" href="#" rel="info">click here to show email address</a>

или

<a class="obfmail" href="#" rel="info">
    <img src="img/click-to-show-email.jpg">
</a>

jQuery

$(document).one'click', '.obfmail', function(e) {
    e.preventDefault();
    a = $(this);
    addr = a.attr('rel');
    $.ajax({
        data: { 
            email: addr
        },
        url : "/a/getemail",
        type: "POST",
        dataType: 'json',
        success: function(data) {
            a.html(data.addr);
            a.attr('href', 'mailto:' + data.addr);
        }
    });
});

PHP

if($_POST['email']) {
    ...
    return json_encode(array(
        code     => '200',
        response => 'success',
        addr     => 'info@domain.ltd'
    ));
}

для большей безопасности, вы можете изменить .on by .one такой $(document).one('click', '.obfmail', function(e) { или даже работать с сгенерированным PHP токеном, который вы передаете в данные по вызову ajax, чтобы принять только один вызов функции ajax:

HTML-код: <a class="obfmail" href="#" rel="info" token="w3487ghdr6rc">

в jQuery:

...
addr = a.attr('rel');
tkn  = a.attr('token');
$.ajax({
    data: { 
        email: addr,
        token: tkn
    }, ...

.

можно также кодировать возвращенный адрес электронной почты или инвертировать его.

.

отлично работает для телефонных номеров тоже !


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

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


Если вы говорите на своем сайте ,что " мой адрес электронной почты (мое имя)@(моя фамилия).com.", и Ваше имя и фамилия довольно чертовски очевидны, это, кажется, лучшая защита от спама, которую вы собираетесь получить.


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


Если кто-то использует Rails, они могут использовать actionview-encoded_mail_to камень. (https://github.com/reed/actionview-encoded_mail_to)

есть несколько вариантов:

: encode-этот ключ будет принимать строки "javascript"или " hex". Передача "javascript" будет динамически создавать и кодировать mailto ссылка затем eval его в DOM страницы. Этот метод не покажет ссылка на странице, если у пользователя отключен JavaScript. Проходящий "hex" будет hex закодировать обработки перед выводом электронную почту ссылка на сайт.

: replace_at-если имя ссылки не указано, обработки используется для метки ссылке. Вы можете использовать эту опцию для запутывание обработки путем замены символа " @ " в строке дано как значение.

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


<!-- Multi-Email Obfuscator  -->
<!-- step 1: &#064; = @  -->
<!-- step 2: a scrap element  -->
<!-- step 3: ROT13 encode for .com  -->
info<!-- step 1 -->&#064;<!-- step 2 --><b style="display:none">my</b>domain<!-- step 3 --><script>document.write(".pbz".replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));</script>

используя JQuery, но при необходимости можно легко портировать на обычный JS. Возьмем следующий HTML блок. Этот пример я предоставил для tel: ссылки для телефонных звонков.

<a class="obfuscate" 
 href="mailto:archie...trajano...net">
 archie...trajano...net
</a>
<a class="obfuscate"
 href="tel:+One FourOneSix-EightFiveSix-SixSixFiveFive">
 FourOneSix-EightFiveSix-SixSixFiveFive
</a>

и преобразовать его в соответствующие ссылки с помощью Javascript.

$(".obfuscate").each(function () {

$(this).html($(this).html()
.replace("...", "@").replace(/\.\.\./g, ".")
.replace(/One/g, "1")
.replace(/Two/g, "2")
.replace(/Three/g, "3")
.replace(/Four/g, "4")
.replace(/Five/g, "5")
.replace(/Six/g, "6")
.replace(/Seven/g, "7")
.replace(/Eight/g, "8")
.replace(/Nine/g, "9")
.replace(/Zero/g, "0"))

$(this).attr("href", $(this).attr("href")
.replace("...", "@").replace(/\.\.\./g, ".")
.replace(/One/g, "1")
.replace(/Two/g, "2")
.replace(/Three/g, "3")
.replace(/Four/g, "4")
.replace(/Five/g, "5")
.replace(/Six/g, "6")
.replace(/Seven/g, "7")
.replace(/Eight/g, "8")
.replace(/Nine/g, "9")
.replace(/Zero/g, "0"))

})

я документировал это более подробно здесь https://trajano.net/2017/01/obfuscating-mailto-links/

алгоритм де/обфускации довольно прост, поэтому его не слишком обременительно писать либо (нет нужно для base64 разбора)


Я использую функции PHP для создания некоторого javascript для вывода электронной почты при загрузке страницы. Обратите внимание, что вы не нужно PHP чтобы создать JS во время выполнения, вы можете создать JS один раз локально, а затем включить статический JS в свою страницу.

вы также можете использовать связанную функцию с этим фрагментом ниже, чтобы автоматически запутать адреса электронной почты в некотором заданном HTML (где $processedContent является HTML):

 $emailMatches = array();
 $matchCount = preg_match_all('/(?:[a-zA-Z0-9_\.\-])+\@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+/', $processedContent, $emailMatches);

 if($matchCount > 0) {
    $emailMatches = $emailMatches[0];

    foreach($emailMatches as $email) {
    $replacement = createJSMailLink($email);

    $processedContent = str_replace($email, createJSMailLink($email), $processedContent);
 }

Регистрация этой выход.

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