Эффективный способ скрыть электронную почту от спам-ботов - PullRequest
176 голосов
/ 27 января 2009

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

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

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

Ответы [ 32 ]

94 голосов
/ 24 апреля 2012

Это метод, который я использовал, с включением на стороне сервера, например, <!--#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

82 голосов
/ 27 января 2009

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

CSS

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

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>

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

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

Приветствия

74 голосов
/ 10 января 2017

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

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

Когда javascript отключен, просто событие click не будет работать, электронная почта по-прежнему отображается.

Другим интересным подходом (по крайней мере без события щелчка) было бы использование метки справа налево для переопределения направления письма. Подробнее об этом: https://en.wikipedia.org/wiki/Right-to-left_mark

52 голосов
/ 27 января 2009

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

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

46 голосов
/ 17 октября 2014

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

<a href="mailto:coxntact@domainx.com"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

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

16 голосов
/ 27 января 2009

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

15 голосов
/ 27 января 2009

См. Как защитить адреса электронной почты от ботов на веб-странице?

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

Я также использовал Энкодер в прошлом - думал, что это очень хорошо, если честно!

10 голосов
/ 27 января 2009

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

<img src="scriptname.php">

И скрипт name.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "you@yourdomain.com";
$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);
?>
10 голосов
/ 24 августа 2013

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

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

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

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

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

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

Вот скрипка: http://jsfiddle.net/hzaw6/

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

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

О, и никогда не назовите что-нибудь по почте или по электронной почте в формате html или javascript. Просто слишком легко поцарапать DOM и объект окна для чего-либо с именем mail или email и проверить, содержит ли оно что-то, совпадающее с электронной почтой. Вот почему вам не нужны переменные, которые бы содержали электронную почту в полной форме, и поэтому вы также хотите, чтобы пользователь взаимодействовал со страницей, прежде чем назначать такие переменные. Если ваша объектная модель 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);
7 голосов
/ 27 января 2009

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

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

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

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

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