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

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

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

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


person Community    schedule 27.01.2009    source источник
comment
Либо это дубликат stackoverflow.com/questions/163628/, или этот другой недействителен, потому что это длинный список вики, не относящийся к сообществу.   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.02.2014
comment
У этого больше голосов, ответов и просмотров. Его не следует закрывать в пользу другого, у которого меньше голосов, ответов и просмотров.   -  person abatishchev    schedule 20.02.2014
comment
Я понимаю вашу логику, но это консенсус сообщества (например, мета-вопрос)?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.02.2014
comment
Я бы закрыл это, чтобы понять, что этот привлекает гораздо больше.   -  person abatishchev    schedule 20.02.2014
comment
Лучшее решение - не делиться своим решением. К сожалению, это такой вопрос. Лучше найти решение и оставить его при себе. Если кто-то будет стандартизирован, спам-боты будут адаптированы для его преодоления.   -  person Dimitris    schedule 12.06.2014
comment
Лучшее решение - объединить несколько из следующих решений, например первая часть электронного письма представлена ​​в виде изображения, вторая часть this.href.replace(/x/g,''), третья часть закодирована в шестнадцатеричном формате и т. д. Ни один спам-бот, каким бы умным он ни был, не будет пробовать различные методы декодирования в разных частях электронного адреса.   -  person    schedule 26.03.2015
comment
Я не думаю, что приведенный выше комментарий о том, что мы не делимся решением, верен. Вы можете поделиться решением и предложить способы сделать его более сложным (например, вместо [at] замените другой комбинацией символов). Это позволит публиковать решение и при этом не автоматизировать его, так как каждую страницу нужно будет анализировать, чего бот делать не будет.   -  person Outside the Box Developer    schedule 17.06.2015
comment
Я думаю, что алгоритмическое запутывание информации без обмена ключами похоже на детерминированное вычисление случайных чисел.   -  person greybeard    schedule 22.06.2015


Ответы (34)


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

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

person Community    schedule 10.01.2017
comment
Это требует больше одобрения. - person heXer; 15.02.2017
comment
Не уверен, почему, но хотя это решение выглядит довольно впечатляюще, оно не запускает мой почтовый клиент. Вот скрипка для тестирования: jsfiddle.net/wd436tg3 - person Ricardo Zea; 09.03.2017
comment
@RicardoZea, какой браузер вы используете? ваша скрипка отлично работает для меня в chrome, ie11, edge и firefox - person cyptus; 09.03.2017
comment
@cyptus Вы правы! Я изменил свой почтовый клиент по умолчанию на MS Mail, и он работает нормально. Он отлично работает во всех браузерах. Спасибо за тестирование :) - person Ricardo Zea; 10.03.2017
comment
Это очень-очень аккуратно и умно. Он заслуживает гораздо больше одобрения. - person zloster; 13.03.2017
comment
Потрясающие. Но добавьте; return false к событию onclick. Это предотвратит некрасивое добавление # в URL-адрес браузера (путем отмены исходной href-ссылки) - person T4NK3R; 19.04.2017
comment
ОДНАКО - я не могу вручную скопировать (видимый) почтовый адрес (в Chrome, Firefox или Edge)? - person T4NK3R; 19.04.2017
comment
@ T4NK3R да - это псевдоэлемент, поэтому выбрать его нельзя. вы можете реализовать ссылку для копирования почты в буфер обмена. Обходной путь для вас, по крайней мере, в Chrome, - нажать ctrl + p для печати и выбрать электронное письмо в предварительном просмотре. - person cyptus; 19.04.2017
comment
У меня были проблемы с доступностью, глядя на это, но быстрое исследование показало, что текущие программы чтения с экрана действительно читают контент, созданный css. Атрибут aria-label, который описывает, что произойдет при нажатии на эту ссылку, все равно улучшит это, а поскольку атрибут href не описывает фактическую цель ссылки, элемент кнопки может быть более подходящим и доступным. Также это может привести к провалу теста WCAG 2.0 на недекоративный контент: w3. org / TR / WCAG20-TECHS / F87.html См. также: adrianroselli.com/2019/02/ - person makkabi; 24.02.2020

Я использовал этот метод с включением на стороне сервера, например. <!--#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 года, спам практически не проблема. Итак, я не могу говорить о том, насколько эффективен этот метод. Возможно, вы захотите прочитать это исследование (хотя он старый), который создал этот график:

введите описание изображения здесь

person Community    schedule 24.04.2012
comment
Зачем вам нужно включать emailObfuscator.include на стороне сервера? Разве это не было бы так же, как писать это в обычном HTML-формате? (возможно, это просто пример?) Также почему вы используете html-комментарии <!-- --> внутри скрипта? И, наконец, почему один из ваших тегов <script> строчный, а другие - прописные <SCRIPT>? Эти методы помогают запутать ботов или что-то в этом роде? - person Templar; 21.07.2014
comment
@Templar В SSI нет необходимости, и, насколько мне известно, он не сбивает с толку ботов. Это делает (делает) мой сайт модульным (больше не используйте этот метод). В комментарии был указан источник, где я нашел взлом (теперь ссылка не работает). Смена футляра - просто случайность. Если это сбивает ботов с толку, тем лучше, но я сомневаюсь, что это даст какой-то эффект. - person Fuhrmanator; 22.07.2014
comment
Более недавнее и полное исследование, посвященное той же идее: grall.name/posts/1 /antiSpam-emailAddressObfuscation.html - person Lucas Cimon; 06.07.2017

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

CSS

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

HTML

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

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

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

Ваше здоровье

person roundcrisis    schedule 27.01.2009
comment
Это действительно забавно. Но, к сожалению, на него нельзя щелкнуть и он не будет работать для копирования / вставки, при этом игнорируются любые браузеры, не поддерживающие CSS, такие как устройства чтения Брайля. - person Arjan; 05.07.2009
comment
Ммм, хорошо, но как только люди, которые пишут сканеры, видят это, это становится бесполезным. - person Mau; 03.08.2010
comment
Сопоставить обратный адрес электронной почты с регулярным выражением так же просто, как сопоставить его без переворота. Рассылка спама - это бизнес на миллиард долларов, и спамеры даже не используют свои собственные циклы ЦП для очистки экранов. Фактически, они уже прочитали этот разговор и соответствующим образом скорректировали свои методы. Все, что читается компьютером, будет доступно для чтения ботами. Будет ли это выполнено с помощью CSS или JavaScript. - person Jani Hyytiäinen; 24.08.2013
comment
@ JaniHyytiäinen Я не согласен. Тот факт, что они не платят за ЦП, не означает, что у них неограниченные ресурсы. Если запуск интерпретатора JS дает слишком мало адресов по своей стоимости, они отключат его. - person o0'.; 23.02.2015
comment
@Lohoris Пока есть спамеры, готовые платить за новые адреса электронной почты, в какой-нибудь стране третьего мира будет бедняга, готовый закодировать панель инструментов для очистки экрана, чтобы заплатить за лекарства для своей дочери, которая умрет без них. Пока есть несчастные люди в жалких ситуациях и есть глупые люди, которые платят за спамеров, дело не в ресурсах. Если бы вы знали, что вам понадобятся деньги через 4 недели, иначе ... вы бы слишком беспокоились об оптимизации процедур очистки экрана? Зная, что у всех есть все в браузерах. Прикрепите к domready и удалите регулярное выражение! - person Jani Hyytiäinen; 24.02.2015
comment
@ JaniHyytiäinen Я не объяснил себя ясно. Спамеры не обладают бесконечной властью, я надеюсь, что мы согласны с этим. Чем тяжелее их парсер, тем меньше страниц он сможет разобрать. Таким образом, возможно, что уменьшение веса приведет к появлению большего количества адресов за тот же период времени. Надеюсь, теперь все ясно. - person o0'.; 24.02.2015
comment
@Lohoris: Google сообщает среднее время загрузки страницы (2,45 с) и средний размер страницы (320 КБ), это дает вам представление о том, сколько синтаксического анализа вы можете выполнить. Пока поток загрузки выполняет запросы, поток синтаксического анализа может выполнять синтаксический анализ. Большая часть загрузок ожидает. Это дает потоку dl возможность проверить предварительные условия, прежде чем принять решение об отправке его в синтаксический анализатор. Например. страница рендеринга, indexOf ('@'), indexOf ('mailto:') и т. д. Поток синтаксического анализа будет получать только + -200 символов вокруг совпадения, что позволило бы выполнить настолько сложный синтаксический анализ, что он "казался бы" бесконечным в терминах мощности синтаксического анализа. - person Jani Hyytiäinen; 28.02.2015
comment
Если вы собираетесь использовать этот метод, может быть хорошей идеей сделать элемент недоступным для выбора. У серьезного пользователя не должно возникнуть проблем с использованием рук для ввода адреса электронной почты. stackoverflow .com / questions / 924916 / - person undefined; 27.08.2016
comment
Это здорово, я сделал компонент Vue.js специально для этого gist.github.com/tripflex/f146b993a56 / а> - person sMyles; 17.12.2019

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

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

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

person Community    schedule 17.10.2014
comment
Аккуратный! Но как насчет мобильных пользователей? - person Bodzio; 13.07.2015
comment
Наведение указателя мыши также запускается, когда вы касаетесь ссылки. Должно работать нормально. - person Andrew Swift; 16.07.2015
comment
Работает, пока ваш адрес не содержит x. :-p Но, я знаю, просто используйте другую букву. - person Dan Henderson; 07.10.2015
comment
Но тогда, если javascript отключен, вы представляете пользователям несуществующий адрес, который вернется в норму, потеряв клиента / пользователя. - person Xeevis; 03.01.2016
comment
Если javascript отключен, ни один из моих сайтов не работает ;-) - person Andrew Swift; 13.01.2016
comment
[email protected] - Если вы используете такой символ, как # (который нельзя использовать в действительном адресе электронной почты), это сократит работу некоторых поисковых роботов, однако они могут удалить недопустимые символы в любом случае. Вы можете использовать строку вместо 1 символа (например, «ZyX441ab»). - person NotJay; 22.07.2016
comment
Еще одна техника запутывания. Однако все они становятся неэффективными, поскольку к настоящему времени обработчики спама интерпретируют JS. - person bytecode77; 02.01.2017
comment
Очень умно! Работает и на мобильном телефоне. - person user1702965; 23.10.2017
comment
@ bytecode77 Есть доказательства этому? Потому что интерпретация JS и запуск событий пользовательского интерфейса - это разные вещи. И я сомневаюсь в последнем, потому что как сканер должен знать, какое событие запускать? - person AndyO; 11.09.2018

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

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

person tvanfosson    schedule 27.01.2009
comment
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - person showdev; 21.07.2014
comment
Хотя я в целом согласен с этим мнением, в данном случае ответ - использовать определенный инструмент. Если ссылка исчезнет, ​​я удалю ответ. - person tvanfosson; 21.07.2014
comment
Спасибо - это здорово. Я пишу что-то вроде этого (покажите ссылку): Отправьте мне электронное письмо: раскрыть - person chrs; 15.02.2016
comment
Обратите внимание, что Google отключил MailHide с Match 2018. Как всегда с бесплатными сервисами Google: они предлагают им до тех пор, пока они могут получать прибыль с их данных, и как только они получают то, что им нужно, они отказываются от этого. Самая ненадежная компания, предлагающая бесплатные услуги. Я бы держался подальше от сервисов Google или других, если вам нужно доверять тому, что вы пытаетесь сделать. - person omni; 30.06.2018

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

person rmeador    schedule 27.01.2009
comment
Единственная проблема заключается в том, что у вас нет копии отправленного сообщения, если только вы не потратите время на то, чтобы скопировать и вставить его в другое место. Лично я не против копирования и вставки, но каждому свое. - person gvkv; 13.06.2009
comment
Что касается отправителя, у которого нет копии: для многих форм в Интернете мне нравится возможность получить копию самому. Однако часто такая опция позволяет злоупотреблять анонимной отправкой сообщений кому угодно ... - person Arjan; 05.07.2009
comment
Это может СКРЫТЬ ваш адрес электронной почты, но это не остановит рассылку спама, если вы не защитите свою форму скриптом проверки изображения captcha. - person SimonDowdles; 03.08.2010
comment
Вы также можете решить проблему отсутствия копии у отправителя, включив в нее возможность отправить ее им. - person steinybot; 11.06.2013
comment
@SimonDowdles, вы можете использовать reCAPTCHA для своей капчи, но если вы это делаете, просто используйте reCAPTCHA, чтобы скрыть свой адрес электронной почты - person Cole Johnson; 19.02.2015
comment
Опция «Отправить копию самому себе» - эффективно превращает форму в спам-канон с вами в качестве отправителя - плохая идея! - person T4NK3R; 19.04.2017

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

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

Раньше я также использовал The Enkoder - мне показалось, что это очень хорошо, если честно!

person Galwegian    schedule 27.01.2009

Если у вас есть поддержка 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);
?>
person Matias    schedule 27.01.2009
comment
вместо использования php вы можете физически создать изображение. И, как и в случае с инвертированием css, у вас все еще есть проблема с тем, что вы не можете щелкнуть мышью и не можете копировать, если не используете ручку: P - person Claudiu; 26.03.2015

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

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

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

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

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

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

Вот сценарий: http://jsfiddle.net/hzaw6/

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

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

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

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

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

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

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

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

Один из моих любимых методов - скрыть адрес электронной почты с помощью 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>

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

person Community    schedule 03.08.2010
comment
Это хороший пример. Спасибо. Есть какие-нибудь подсказки относительно SpamBots, использующих HEX-декодирование? - person jasonflaherty; 05.04.2012

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

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

email:before {
    content: "admin";
}

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

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

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

И тада!

person Community    schedule 03.05.2017
comment
Это работает, но не поддерживает копипаст, что может повлиять на удобство использования для большинства пользователей. - person Iruku Kagika; 13.02.2020

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

HTML:

<a href="mailto:[email protected]" id="lnkMail">moc.elpmaxe@em</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);
});

Вот рабочий пример.

person Community    schedule 27.05.2015
comment
Будет ли отображаться правильное значение href в строке состояния браузера при наведении курсора мыши на ссылку? - person Nik O'Lai; 18.06.2015
comment
Да, он показывает правильное значение href при зависании ссылки. Вот почему необходимо реализовать метод jQuery .hover. - person Sergiu; 22.06.2015
comment
К сожалению, нет, он не показывает правильное значение href, по крайней мере, при первом наведении курсора на ссылку (это [email protected]). При втором наведении все было в порядке. Проверьте это с помощью своей ссылки. - person Nik O'Lai; 03.07.2015
comment
Он работает в Chrome и IE. Похоже, только в Firefox при первом наведении строка состояния не обновляется. Попробую найти решение для Firefox. - person Sergiu; 06.07.2015
comment
Понятно, мне действительно нравится этот. - person Eric Bishard; 13.03.2016

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

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

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

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

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

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : [email protected]

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

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

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

person Community    schedule 03.01.2013

Одно из простых решений - использовать сущности 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>
person Romain Linsolas    schedule 27.01.2009
comment
Не могли бы вы рассказать мне о сайте, на котором есть сервис для быстрого преобразования, как вы. - person abatishchev; 27.01.2009
comment
Попробуйте google.se/search?q=HTML+entities+converter это должно занять вас;) - person grapefrukt; 27.01.2009
comment
Google может найти для вас много страниц. Один пример: hp.vector.co.jp/authors/VA022023 / javascript / - person Romain Linsolas; 27.01.2009
comment
Но не может ли бот с такой же легкостью выполнить регулярное выражение и это? - person gargantuan; 13.06.2009
comment
Ой, пример me @ stack ... лучше записать как [email protected], [email protected] или [email protected] - это единственные доменные имена, которые не-владельцы должны использовать в примерах! - person Arjan; 13.06.2009
comment
Не так эффективно, согласно techblog.tilllate.com/2008/07/20/ - person Fuhrmanator; 16.09.2012
comment
@Arjan - ответ отредактирован, чтобы предоставить безопасный пример. romaintaz: Надеюсь, вы не возражаете против редактирования. - person Kevin Fegan; 07.04.2013

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


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

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

И добавьте внизу DOM (после рендеринга) следующий фрагмент:

<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>
person Community    schedule 12.05.2016

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

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

Нет ответа, имхо.

person guerda    schedule 27.01.2009
comment
Есть ли сканеры, интерпретирующие JavaScript? Мой единственный метод кодирования JavaScript, казалось, хорошо работал для меня в последние несколько лет - мой уровень спама был довольно стабильным ~ 4 в неделю, поэтому я не беспокоился об адресах других людей, которые я доверил этому методу. Нужно ли мне? - person Kev; 27.01.2009
comment
Конечно, это может исключить множество сканеров, но я, если бы я создал краулер адресов, я бы реализовал библиотеку JavaScript :) - person guerda; 28.01.2009
comment
больше усилий, чем вы думаете - person anonymous coward; 13.06.2009
comment
Google сейчас просматривает какой-то JS. - person Alister Bulman; 13.06.2009

Вероятно, есть боты, которые распознают [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>

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

person Gumbo    schedule 27.01.2009
comment
Полностью согласен, спамеры - умные люди, после многих лет, когда люди добавляли [at] или [точку] вместо синтаксиса, конечно, у них будут алгоритмы, которые подбирают эти шаблоны. - person SimonDowdles; 03.08.2010
comment
А как насчет декодирования этих шестнадцатеричных значений? - person jasonflaherty; 05.04.2012

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

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

person Community    schedule 06.01.2011

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

Вот как:

<div id="contacts">Contacts</div>

<script>
  document.querySelector("#contacts").addEventListener("mouseover", (event) => {
    // Base64-encode your email and provide it as argument to atob()
    event.target.textContent = atob('aW5mb0BjbGV2ZXJpbmcuZWU=')
  });
</script>
person Community    schedule 18.07.2020

Одна из возможностей - использовать свойство isTrusted (Javascript).

Свойство isTrusted только для чтения интерфейса Event является логическим, которое имеет значение true, если событие было сгенерировано действием пользователя, и false, когда событие было создано или изменено сценарием или отправлено через EventTarget.dispatchEvent ().

например, в вашем случае:

getEmail() {
  if (event.isTrusted) {
    /* The event is trusted */
    return '[email protected]';
  } else {
    /* The event is not trusted */
    return '[email protected]';
  }
}

⚠ IE несовместим!

Дополнительные сведения см. В документе: https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted

person Community    schedule 12.09.2020

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

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

person Vatine    schedule 27.01.2009

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

  1. я пишу свою электронную почту на изображении, которое используется в доменных звонках, и оно работает отлично, или
  2. заменить символ 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>
person Community    schedule 08.11.2012

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

person Community    schedule 21.02.2013

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

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

person xaddict    schedule 27.01.2009
comment
о, смотрите - [email protected] - там адрес электронной почты в виде обычного текста. - person Alister Bulman; 13.06.2009

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

 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.

person Community    schedule 13.10.2013

Вариант 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 
person Community    schedule 06.03.2014
comment
Я считаю, что вариант 1 - не лучший вариант. Парсер, работающий вместе с ботом, может легко определить значение innerHTML, и вариант 3, вероятно, также не так хорош, потому что умный бот может это выяснить. Я считаю вариант 2 лучшим. - person John Sonderson; 06.02.2015

Мне не нравится смешивать 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/

person Community    schedule 02.12.2015

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

joe&#064;mail.com

выходы

[email protected]
person Community    schedule 29.04.2013
comment
Таким образом, на адрес электронной почты нельзя щелкнуть, и размещение символа @ не будет пуленепробиваемым, так как он не всегда будет выглядеть так же, как если бы он был встроен. - person Brent O'Connor; 09.08.2013

Вот простое решение этой проблемы с помощью 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>
person Community    schedule 05.09.2011

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

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

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

Я обнаружил, что во многих таблицах общих символов буквы @ и a-z встречаются более одного раза. Вы можете сопоставить исходные символы с новыми сопоставлениями, чтобы спам-ботам было сложнее определить, что это за электронная почта.

Если вы перебираете строку и получаете символьный код буквы, затем добавляете к нему 65248 и строите html-объект на основе числа, вы получаете удобочитаемый адрес электронной почты.

var str = '[email protected]';
str = str.toLowerCase().replace(/[\.@a-z]/gi, function(match, position, str){
    var num = str.charCodeAt(position);
    return ('&#' + (num + 65248) + ';');
});

Вот рабочая скрипка: http://jsfiddle.net/EhtSC/8/

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

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

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

Возможно, это не самый безопасный подход, но мне действительно было весело с ним поиграть: D

person Community    schedule 25.08.2013

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

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

Использует JavaScript. Успешно пользуюсь этим уже много лет.

person Community    schedule 08.01.2017

Другой вариант, я предпочитаю шрифтовые отличные иконки

Реализация Fa:

<link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">

Почта Адрес:

<a href="mailto:[email protected]"><span class="label">info<i class="fa fa-at"></i>uploadimage.club</span></a>
person Community    schedule 25.12.2017