Эффективный способ скрыть электронную почту от спам-ботов

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

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

Что вы думаете об этом? Это эффективно? Какие другие методы вы знаете или используете?

Ответ 1

Это метод, который я использовал, с серверной стороны, например, <!--#include file="emailObfuscator.include" --> где emailObfuscator.include содержит следующее:

<!-- // http://lists.evolt.org/archive/Week-of-Mon-20040202/154813.html -->
<script type="text/javascript">
    function gen_mail_to_link(lhs,rhs,subject) {
        document.write("<a href=\"mailto");
        document.write(":" + lhs + "@");
        document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
    }
</script>

Чтобы включить адрес, я использую JavaScript:

<script type="text/javascript"> 
    gen_mail_to_link('john.doe','example.com','Feedback about your site...');
</script>
<noscript>
  <em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>

Поскольку я получаю электронную почту через Gmail с 2005 года, спам в значительной степени не является проблемой. Поэтому я не могу говорить о том, насколько эффективен этот метод. Возможно, вы захотите прочитать это исследование (хотя оно и старое), которое произвело этот график:

enter image description here

Ответ 2

Посмотрите таким образом, довольно умный и используя css.

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

HTML

<span class="reverse">[email protected]</span>

Затем CSS выше переопределяет направление чтения и представляет текст пользователю в правильном порядке.

Надеюсь, что это поможет

Приветствия

Ответ 3

У меня совершенно другое отношение к этому. Я использую MailHide для этого.

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

Ответ 4

Не моя идея изначально, но я не могу найти автора:

<a href="mailto:[email protected]"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

Добавьте столько x, сколько хотите. Он отлично работает для чтения, копирования и вставки и не может быть прочитан ботом.

Ответ 5

Работа с контентом и attr в CSS:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
<a data-name="info" data-domain="test" data-tld="com" href="#" class="cryptedmail" onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld"></a>

Ответ 6

Я думаю, что единственным надежным способом, который вы можете получить, является создание страницы "Контакт", которая представляет собой форму, которая отправляет script, который отправляет на ваш адрес электронной почты. Таким образом, ваш адрес никогда не подвергается публике. По какой-то причине это может быть нежелательно, но я считаю это довольно хорошим решением. Меня часто раздражает, когда я вынужден скопировать/вставить кому-то адрес электронной почты со своего сайта на мой почтовый клиент и отправить им сообщение; Я бы предпочел сделать это прямо через форму на своем сайте. Кроме того, этот подход позволяет вам отправлять анонимные комментарии и т.д. Просто убедитесь, что вы защищаете свою форму, используя какую-то антиботовую схему, например, капчу. Их много обсуждается на SO.

Ответ 8

Если у вас есть поддержка php, вы можете сделать что-то вроде этого:

<img src="scriptname.php">

И scriptname.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "[email protected]";
$length    =    (strlen($email)*8);
$im = @ImageCreate ($length, 20)
     or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255); // White: 255,255,255
$text_color = ImageColorAllocate ($im, 55, 103, 122);
imagestring($im, 3,5,2,$email, $text_color);
imagepng ($im);
?>

Ответ 9

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

Все, что легко читается машиной, будет легко считываться машинами с помощью спамеров. Хотя их действия кажутся нам глупыми, они не глупые люди. Они новаторские и изобретательные. Они не просто используют ботов для сбора электронных писем, у них есть множество методов в их распоряжении, и в дополнение к этому они просто платят за хорошие свежие списки электронных писем. Это означает, что они получили тысячи хакеров-хакеров во всем мире для выполнения своих задач. Люди готовы кодировать вредоносное ПО, которое очищает экраны браузеров других людей, что в конечном итоге делает любой метод, который вы пытаетесь достичь бесполезным. Этот поток уже был прочитан 10+ такими людьми, и они смеются над нами. Некоторым из них может быть даже скучно до слез, чтобы узнать, что мы не можем предложить им новый вызов.

Имейте в виду, что вы в конце концов не пытаетесь сэкономить свое время, но время других. Из-за этого, пожалуйста, рассмотрите возможность провести дополнительное время здесь. Существует не простая в использовании магическая пуля, которая будет работать. Если вы работаете в компании, которая публикует электронную почту 100 человек на сайте, и вы можете уменьшить 1 спам-электронную почту в день на человека, мы говорим о 36500 спам-письмах в год. Если удаление такого электронного письма занимает в среднем 5 секунд, мы говорим о 50 рабочих часах в год. Не говоря уже о уменьшенном количестве досады. Итак, почему бы не потратить несколько часов на это?

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

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

Я потратил около 20 минут, чтобы закодировать пример того, что я имею в виду. В примере я использовал KnockoutJS просто потому, что мне это нравится, и я знаю, что вы, вероятно, не будете использовать его сами. Но в любом случае это не имеет значения. Это обычное решение, которое широко не используется. Трещина это не будет вознаграждать за это, так как метод его работы будет работать только на одной странице в обширном Интернете.

Здесь скрипка: http://jsfiddle.net/hzaw6/

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

И да, я знаю, что он не работает на IE = lte8 из-за "Невозможно получить атрибуты свойства" undefined или нулевой ссылки ", но мне просто все равно, потому что это просто демо-метод, а не фактическая реализация и не предназначенные для использования в производстве. Не стесняйтесь кодировать свой собственный, который более холодный, технически более твердый и т.д.

О, и никогда никогда не назовешь что-нибудь письмо или электронную почту в html или javascript. Это просто слишком легко очистить DOM и оконный объект для чего-либо, называемого почтой или электронной почтой, и проверить, содержит ли он что-то, что соответствует электронной почте. Вот почему вы не хотите, чтобы какие-либо переменные когда-либо содержали электронную почту в полной форме, и именно поэтому вы хотите, чтобы пользователь взаимодействовал со страницей, прежде чем назначать такие переменные. Если ваша объектная модель javascript содержит любые адреса электронной почты в состоянии готовности DOM, вы подвергаете их спамерам.

HTML:

<div data-bind="foreach: contacts">
    <div class="contact">
        <div>
            <h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
            <ul>
                <li>Phone: <span data-bind="text: phone"></span></li>
                <li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
            </ul>
        </div>
    </div>
</div>

JS

function ViewModel(){
    var self = this;

    self.contacts = ko.observableArray([
        { firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
        { firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
        { firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
    ]);
    self.msgMeToThis = ko.observable('');
    self.reveal = function(m, e){
        var name = e.target.attributes.href.value;
        name = name.replace('#', '');
        self.msgMeToThis(name);
    };
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);

Ответ 10

Вы можете скрыть символы, используя html-объекты в hexa (ex: & # x40 for @). Это удобное решение, так как правильный браузер переведет его, и вы можете иметь нормальную ссылку. Недостатком является то, что бот может перевести его теоретически, но это немного необычно. Я использую это, чтобы защитить свою электронную почту в своем блоге.

Другим решением является использовать javascript для сборки части адреса и для декодирования на лету адреса. Недостатком является то, что браузер с отключенным javascript не будет показывать ваш адрес.

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

Ваше решение довольно хорошо, так как вы добавляете только недостаток (записываете вручную @) только для пользователя, у которого отключен javascript. Вы также можете быть более безопасным с помощью:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"

Ответ 11

Один из моих любимых методов - обфускать адрес электронной почты, используя php, классический пример - преобразовать символы в значения HEX следующим образом:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}

И затем в моей разметке я просто назову его следующим образом:

<a href="mailto:<?php echo myobfiscate('[email protected]')" title="Email me!"><?php echo myobfiscate('[email protected]');</a>

Затем изучите свой источник, вы будете приятно удивлены!

Ответ 12

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

HTML:

<a href="mailto:[email protected]" id="lnkMail">[email protected]</a>

CSS

#lnkMail {
    unicode-bidi: bidi-override;
    direction: rtl;
}

JQuery

$('#lnkMail').hover(function(){
    // here you can use whatever replace you want
    var newHref = $(this).attr('href').replace('spam', 'com');
    $(this).attr('href', newHref);
});

Здесь - рабочий пример.

Ответ 13

Одним из простых решений является использование объектов HTML вместо фактических символов. Например, "[email protected]" будет преобразован в:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>

Ответ 14

! - добавив это для справки, не знаю, как устаревшая информация может быть, но она рассказывает о нескольких простых решениях, которые не требуют использования каких-либо скриптов

После поиска этого я наткнулся на эту страницу, но также и на следующие страницы:

http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses

попробуйте изменить адрес электронной почты

Пример простого HTML:

<bdo dir="rtl">[email protected]</bdo>
Result : [email protected]

Тот же эффект с использованием CSS

CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">[email protected]</span>
Result : [email protected]

Объединение этого с любым из ранее упомянутых методов может даже сделать его более эффективным

Ответ 15

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

Параметр JavaScript не будет работать долго, потому что есть много интерпретаторов JavaScript, которые интерпретируют JavaScript.

Нет ответа, imho.

Ответ 16

Вероятно, есть боты, которые распознают [at] и другие маскировки как символ @. Таким образом, это не очень эффективный метод.

Конечно, вы можете использовать некоторые кодировки, такие как URL-кодирование или ссылки на HTML-символы (или оба):

// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
    return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
    return $retVal;
}

$email = '[email protected]';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';

// output
// <a href="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

Но поскольку это законно использовать, каждый клиент/почтовый клиент должен также обрабатывать эти кодировки.

Ответ 17

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

Существует также модуль для Drupal для автоматического включения электронной почты в SpamSpans, если вам это нужно.

Ответ 18

Вот моя рабочая версия:


Создайте где-нибудь контейнер с резервным текстом:

<div id="knock_knock">Activate JavaScript, please.</div>

И добавьте в нижней части DOM (w.r.t. render) следующий фрагмент:

<script>
  (function(d,id,lhs,rhs){
    d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
  })(window.document, "knock_knock", "your.name", "example.com");
</script>

Он добавляет сгенерированную гиперссылку в указанный контейнер:

<div id="knock_knock"><a rel="nofollow" href="[email protected]">Mail</a></div>

Кроме того, здесь приведена сокращенная версия:

<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>

Ответ 19

Работает ли он, если я щелкнул правой кнопкой мыши по ссылке и выбрал "URL-адрес копии"? Если нет, это очень не идеальная ситуация (я очень редко нажимаю на ссылку mailto, предпочитая копировать адрес электронной почты и вставлять ее в свое почтовое приложение или где бы мне это ни было в определенный момент времени).

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

Ответ 20

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

Во-вторых, способ реализации безопасной функции - избегать тега <button>. Этот тег нуждается в текстовой вставке между тегами, что делает ее доступной для чтения на компьютере. Вместо этого попробуйте <input type="button"> с помощью обработчика javascript для onClick. Затем используйте все методы, упомянутые другим, чтобы реализовать безопасную электронную почту.

Еще один вариант - нажать кнопку "Нажмите, чтобы увидеть адрес электронной почты". После щелчка это изменится на кодированное письмо (символы в кодах HTML). Еще один щелчок перенаправляет на функцию "mailto: email"

Некодированная версия последней идеи с выбираемыми и неизменными адресами электронной почты:

<html>
<body>
<script type="text/javascript">
      e1="@domain";
      e2="me";
      e3=".extension";
email_link="mailto:"+e2+e1+e3;
</script>
<input type="text" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="text" onClick="this.value=email;" value="Click for mail-address"/>
<input type="button" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="button" onClick="this.value=email;" value="Click for mail-address"/>
</body></html>

Посмотрите, если это то, что вы хотели бы, и объедините его с идеями других. Вы никогда не можете быть уверены.

Ответ 21

после использования многих методов я нашел легкий способ и очень дружелюбный, боты ищут @Símbolo, а в последнее время они ищут [at] ant его вариацию, поэтому я использую 2 метода

  • Я пишу свою электронную почту на изображении, как использование domaintolls, и оно работает отлично или
  • чтобы заменить Símbolo (@) изображением его как

@ replace и изображение alt будет alt= "@", поэтому бот найдет изображение, и любой человек увидит его как обычный адрес, поэтому, если он скопирует его, он скопирует электронное письмо, а работа будет дон поэтому код будет

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>

Ответ 22

Существует открытая лицензия PHP script, которая выводит javascript, который кодирует почту: http://www.maurits.vdschee.nl/php_hide_email/. Затем вы можете легко вызвать функцию php с определенной почтой в качестве аргумента.

Ответ 23

И моя функция. Я создал его, глядя на ответы, размещенные в этой теме.

 function antiboteEmail($email)
 {
        $html = '';

        $email = strrev($email);
        $randId = rand(1, 500);

        $html .= '<span id="addr-'.$randId.'" class="addr">[turn javascript on to see the e-mail]</span>';
        $html .= <<<EOD
                <script>
                $(document).ready(function(){

                    var addr = "$email";
                    addr = addr.split("").reverse().join("");
                    $("#addr-$randId").html("<a href=\"mailto:" + addr + "\">" + addr + " </a>");
                });
                </script>
EOD;

        return $html;
    }

Он использует два метода: справа налево и javascript.

Ответ 24

Вариант 1. Разделите адрес электронной почты на несколько частей и создайте массив из JavaScript из этих частей. Затем соедините эти части в правильном порядке и используйте свойство .innerHTML, чтобы добавить адрес электронной почты на веб-страницу.

 <span id="email">  </span>   // blank tag

 <script>
 var parts = ["info", "XXXXabc", "com", "&#46;", "&#64;"];
 var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];
 document.getElementById("email").innerHTML=email; 
 </script>

Вариант 2. Использование изображения вместо текста электронной почты

Сайт создателя изображений из текста: http://www.chxo.com/labelgen/

Вариант 3. Мы можем использовать AT вместо "@" и DOT вместо "."

i.e:

 info(AT)XXXabc(DOT)com 

Ответ 25

Мне не нравятся JavaScript и HTML, поэтому я использую это решение. На данный момент это отлично работает.

Идея: вы могли бы сделать ее более сложной, предоставив зашифрованную информацию в атрибутах data и расшифровать ее в JS. Это просто делается, заменяя буквы или просто меняя их.

HTML:

<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>

JS

$(function() {
    $('.generate-email').each(function() {
        var that = $(this);
        that.html(
            that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
        );
    });  
});

Попробуйте: http://jsfiddle.net/x6g9L817/

Ответ 26

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

Защита электронной почты на веб-страницах

Использует JavaScript. Я успешно использовал его в течение многих лет.

Ответ 27

Спамботы не будут интерпретировать это, потому что это менее известный метод:)

Сначала определите css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

Теперь, где бы вы ни хотели отображать свой адрес электронной почты, просто вставьте следующий HTML-код:

<div id="email"></div>

И тада!

Ответ 28

Вот простое решение jquery для этой проблемы:

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

Ответ 29

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

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"

Ответ 30

как насчет HTML_CHARACTER?:

joe&#064;mail.com

выходы

[email protected]