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


Я провел последние несколько дней, работая над обновлением моего личного сайта. 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 118

25 ответов:

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

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

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

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

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

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

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

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

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

видимо использование 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 Code (и группы). Отображение номинала для электронной почты и кликабельной части ("..."). Щелчок на этом указывает, что вы хотите знать электронное письмо, и вас попросят заполнить капчу. После этого электронная почта (и другие?) видны вам.

один веб-сайт, который я поддерживаю, использует несколько упрощенные средства 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, взгляните на это, например:

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 от сайт памяток.

веб-страница генерирует некоторый JavaScript,который может быть улучшен. Элемент 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 display: none
  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. Недостатком является то, что он требуется поддержка сценариев, для которых некоторые из них могут быть нет.

просто другой подход.

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

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

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. Вы предоставляете свой адрес электронной почты для функции, которая не будет работать для большой части ваших пользователей.

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

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

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

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

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

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

: 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, скрывая его от роботов-сборщиков электронной почты, которые сканируют веб-страницы в поисках открытых адресов. Ваш адрес будет корректно отображаться веб-браузерами, но будет практически неразборчивым для электронной почты уборочных роботов.