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

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

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

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

<a href="mailto:[email protected]">e-mail me</a>

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Легкий способ обфускации href якоря - это base64-encode it:

> btoa('mailto:[email protected]')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

И затем включите его в hardcoded:

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

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

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:[email protected]") ?>')">E-Mail</a>

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

моя действительно проста:

<h3 id="email">[email protected]</h3><!-- add a fake email -->


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

Ответ 12

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

Ответ 13

В качестве плаката, указанного выше, я также использую обфускацию JavaScript с сайта jottings.

На веб-странице создается JavaScript, который можно улучшить. Текстовая строка mailto: находится в ясной и идентифицируемой роботами (которая может выявить эту и разузнать эту строку), но если вы занесете на веб-страницу jottings.com адрес электронной почты формы mailto:[email protected] вместо [email protected] и затем удаляет текст mailto: из генерируемого JavaScript, у него внезапно появляется некоторый JavaScript, который не выглядит так, как будто он вообще имеет какое-либо отношение к электронной почте - просто случайный JavaScript, по которому сеть заполнена. Можно еще улучшить это, избавившись от текста ссылки - я заменил мой образ моего адреса электронной почты, который находится в довольно неясном шрифте. Тогда на всякий случай этот метод на jottings.com станет популярным, я рандомизировал имена переменных в выходном JavaScript, чтобы затруднить роботу обнаружение экземпляра генерируемого JavaScript кода JavaScript.

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

Пример может сделать это более понятным. Я использовал Обфускатор Jottings по ссылке выше, чтобы затушевать mailto:[email protected] (обратите внимание, что я обманываю оригинальное намерение сайта jottings, введя строку mailto:[email protected] вместо [email protected]) с текстом "Отправить мне электронную почту", в котором помещаются превратился в этот 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:[email protected]"
  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>

После того, как я вернусь, я вставляю его в редактор и:

  • удалите mailto:
  • заменить текст ссылки указателем на образ моего адреса электронной почты
  • переименовать все переменные
  • замените раздел "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:[email protected]"
  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>

Ответ 14

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

Ответ 15

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

Его тремя лучшими способами были:

  • Изменение направления кода с помощью CSS
  • Использование отображения CSS: none
  • Шифрование ROT13

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

Ответ 16

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

Ответ 17

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

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

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

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

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

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

Ответ 18

Решение вызова 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     => '[email protected]'
    ));
}

Для большей безопасности вы можете изменить .on на .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
    }, ...

.

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

.

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

Ответ 19

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

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

Ответ 20

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

Ответ 21

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

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

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

: replace_at - Если имя ссылки не указано, email-адрес используется для метки ссылки. Вы можете использовать этот параметр для obfuscate email_address, заменив знак @на строку заданное как значение.

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

Ответ 22

<!-- 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>

Ответ 23

Использование 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/

Алгоритм de/obfuscation довольно прост, поэтому он не слишком облагается, чтобы писать либо (нет необходимости в синтаксическом анализе base64)

Ответ 25

Поскольку это решение нигде не упоминается, но у меня хорошо работает:

Я сделаю это:

  • создать ссылку mailto с поддельной электронной почтой. Мне нравится [email protected] по понятным причинам: спаммер может спамить свой собственный ботнет, если этот адрес не проверен.

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

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

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

Рабочий пример php файла:

<html>
<head>
<title>E-Mail Obfuscating</title>
</head>
<body>
<?php
$email = "[email protected]";
echo "<a class='emailLink' href='mailto:[email protected]' >Send me an e-mail!</a>"
    ."<span style='display:none' data-hash='" . base64_encode($email) . "' />";
?>
<script>
<!--
var emailLinks = document.getElementsByClassName("emailLink");
setTimeout(function() {
    for(var i=0; i <emailLinks.length; ++i){
        emailLinks[i].addEventListener("click", function(){
            let encodedEmail = this.nextSibling.getAttribute('data-hash');
            let decodedEmail = atob(encodedEmail);
            this.href = "mailto:" + decodedEmail;
            this.text = decodedEmail;
        });
    }
}, 1000);

-->
</script>
</body>
</html>

Пусть код будет с вами.

Ответ 26

Что если создать ссылку "Свяжитесь со мной", указывающую на каталог, защищенный паролем? Конечно, вы должны дать пропуск для доступа.

"Свяжитесь со мной"> •••••••••••> contact/index.html

При обращении к странице contact/index.html отображается электронное письмо, например, mailto.

Ответ 27

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

Вы также можете использовать связанную функцию с этим фрагментом ниже, чтобы автоматически обфускать адреса электронной почты в определенном HTML (где $обработанContent является 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);
 }

Ответ 28

Отметьте этот вне.

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