tl; dr
Скрыть адрес электронной почты от ботов без использования скриптов и сохранить mailto:
функциональность. Метод также должен поддерживать программы чтения с экрана.
Резюме
Обфускация электронной почты без использования скриптов или контактных форм
Адрес электронной почты должен быть полностью видимым для зрителей и поддерживать
mailto:
функциональностьАдрес электронной почты не должен быть в виде изображения .
Электронный адрес должен быть «полностью» скрыт от спам-сканеров, спам-ботов и других сборщиков.
Желаемый эффект:
Никаких скриптов , пожалуйста. В проекте не используются скрипты, и я бы хотел сохранить их в таком виде .
Адрес электронной почты либо отображается на странице, либо может быть легко отображен после какого-либо взаимодействия с пользователем, например открытия модального окна.
Пользователь может нажать на на адрес электронной почты , который , в свою очередь , повлечет за
mailto:
функциональность.При щелчке по электронной почте откроется приложение электронной почты пользователя.
Другими словами,
mailto:
функциональность должна работать.Адрес электронной почты не отображается или не идентифицируется как адрес электронной почты для ботов (включая источник страницы)
У меня нет почтового ящика, полного спама
Что НЕ РАБОТАЕТ
Добавление контактной формы - или чего-то подобного - вместо адреса электронной почты
Ненавижу контактные формы . Я редко заполняю контактную форму. Если адреса электронной почты нет, я ищу номер телефона, а если его нет, я начинаю искать альтернативную услугу. Я бы заполнил контактную форму только в случае крайней необходимости.
Замена адреса изображением адреса
Это создает ОГРОМНЫЙ недостаток для тех, кто использует программу чтения с экрана ( пожалуйста, помните о слабовидящих в своих будущих проектах )
Он также удаляет на
mailto:
функциональность , если вы не сделаете кликабельные изображения , а затем добавитьmailto:
функциональность какhref
для связи, но что поражения цели и теперь электронная почта видны боты.
Что может сработать:
Умное использование
pseudo-elements
inCSS
Решения, использующие
base64
кодированиеРазделение адреса электронной почты и распространение частей по документу, а затем их объединение в модальном окне, когда пользователь нажимает кнопку (это, вероятно, будет включать несколько
CSS
классов и использованиеanchor tags
)Изменение
html
атрибутов черезCSS
@MortezaAsadi изящно поднял эту возможность в комментариях ниже. Это ссылка на полную версию - Статья за 2012 год:
Что, если бы мы могли использовать CSS для изменения атрибутов HTML?
Другие творческие решения, выходящие за рамки моих знаний.
Подобные вопросы / исправления
(Это отличное исправление, предложенное Джо Маллером, оно работает хорошо, но основано на сценариях . Вот как это выглядит;
<SCRIPT TYPE="text/javascript">
emailE = 'emailserver.com'
emailE = ('yourname' + '@' + emailE)
document.write('<A href="mailto:' + emailE + '">' + emailE + '</a>')
</script>
<NOSCRIPT>
Email address protected by JavaScript
</NOSCRIPT>
Ищете функцию обфускатора адресов электронной почты только на php
(Умное решение, использующее оба
PHP
иCSS
для того, чтобы сначала отменить электронное письмо с помощью PHP, а затем отменить его с помощью CSS) Очень многообещающее решение, которое отлично работает! Но это слишком легко решить .Стоит ли в наши дни скрывать адреса электронной почты в Интернете?
(Исправление Javascript)
Лучший способ скрыть адрес электронной почты на веб-сайте?
Выбранный ответ работает . Это действительно хорошо работает. Это включает в себя кодирование электронной почты как
html entities
. Можно ли это улучшить?Вот как это выглядит;
<A HREF="mailto: yourname@domain.com"> yourname@domain.com </A>
Действительно ли работает обфускация адресов электронной почты?
(Выбранный ответ на этот вопрос SuperUser великолепен, и он представляет собой исследование количества спама, полученного с использованием различных методов обфускации.
Кажется, что манипулирование адресом электронной почты,
CSS
чтобы заставить егоrtl
работать. Это тот же метод, который использовался в первом вопросе, который я связал в этом разделе.Я не уверен, что добавление
mailto:
функциональности к исправлению повлияет на результаты.Есть также много других вопросов по SO, на которые есть похожие ответы. Я не нашел ничего подходящего для желаемого эффекта
Вопрос:
Можно ли повысить эффективность (т. Е. Как можно меньше спама) описанных выше методов обфускации электронной почты, объединив два или более исправлений (или даже добавив новые исправления) при:
A- Поддержание mailto:
функциональности; и
B- Поддержка программ чтения с экрана
Редактировать:
Многие из приведенных ниже ответов и комментариев представляют собой очень хороший вопрос, указывающий на невозможность сделать это без какого-либоjs
Вопрос, который задается / подразумевается :
Почему бы не использовать
js
?
Ответ: у меня аллергия на js
Шутя в сторону,
Я задал этот вопрос по трем основным причинам:
Контактные формы становятся все более и более приемлемыми в качестве замены для предоставления адреса электронной почты, чего не следует делать.
Если это можно сделать без сценариев, то это нужно делать без сценариев.
Любопытство: (поскольку я фактически использую одно из
js
исправлений в настоящее время) я хотел посмотреть , приведет ли обсуждение этого вопроса к лучшему способу решения этой проблемы.
источник
mailto:
функциональность и не хотите использовать Javascript, это просто невозможно.Ответы:
Проблема с вашим запросом связана именно с «Поддержкой программ чтения с экрана», поскольку программы чтения с экрана по определению являются своего рода «ботами». Если программе чтения с экрана необходимо иметь возможность интерпретировать адрес электронной почты, то сканер страниц также сможет интерпретировать его.
Кроме того, смысл
mailto
атрибута - быть стандартом для работы с адресами электронной почты в Интернете. Спросить, есть ли второй способ сделать это, это как бы спросить, есть ли второй стандарт.Выполнение этого с помощью сценариев по-прежнему будет иметь ту же проблему, что и после загрузки страницы, сценарий был бы запущен и адрес электронной почты отображался в DOM (если вы не заполните адрес электронной почты
on click
или что-то в этом роде). В любом случае у программ чтения с экрана по-прежнему будут проблемы с этим, поскольку он еще не загружен.Честно говоря, просто получите почтовый сервис с приличным спам-фильтром и укажите строку темы по умолчанию, которую вам легко сортировать в своем почтовом ящике.
<a href="mailto:no-one@no-where.com?subject=Something to filter on">Email me</a>
Вы спрашиваете, есть ли в стандарте два способа сделать что-либо: один для ботов, а другой - для не-ботов. Ответ - нет, и вам нужно просто сражаться с ботами как можно лучше.
источник
@
, а затем разбивают этот текст?
и проверяют, совпадает ли первая часть с регулярным выражением. Наконец-то сохраните 2 версиюПобедить почтовых роботов непросто. Вы можете проверить раздел "Меры противодействия сбору адресов электронной почты" в Википедии.
Моя предыстория такова, что я написал поискового бота. Много лет назад он просканировал более 105 000 URL-адресов. Из того, что я сделал, это то, что боты для сканирования сети буквально видят ВСЕ, что является текстом, который появляется на веб-странице. Боты читают все, кроме изображений.
Спам нельзя легко остановить с помощью кода по следующим причинам:
CSS и JS не имеют значения при использовании тега mailto :. Боты специально просматривают HTML-страницы по ключевому слову mailto :. Все от этого двоеточия до следующей одинарной или двойной кавычки (в зависимости от того, что наступит раньше) рассматривается как адрес электронной почты. Адреса электронной почты объекта HTML - как в примере выше - можно быстро преобразовать с помощью обратного метода / функции ASCII. Выполнение приведенного выше фрагмента кода JavaScript быстро преобразует строку, начинающуюся с: & # 121; & # 111; & # 117; & # 114; ..., в ... "yourname@domain.com". (Мой поисковый бот отбрасывал hrefs с адресами mailto: email, поскольку мне нужны были URL-адреса для веб-страниц, а не адреса электронной почты.)
Если на странице происходит сбой бота, автор бота настроит бота для исправления сбоя с учетом этой страницы, чтобы бот не вылетал на этой странице снова в будущем. Таким образом, делая их бота умнее.
Авторы ботов могут писать ботов, которые генерируют все известные варианты адресов электронной почты ... без сканирования страниц и никогда не используя никаких начальных адресов электронной почты. Хотя это может быть невозможно сделать, это вполне возможно с сегодняшними процессорами с большим количеством ядер (которые являются гиперпоточными и работают на частоте 4+ ГГц), а также с возможностью использования распределенных облачных вычислений и даже суперкомпьютеров. Вполне возможно, что теперь кто-то может создать бот-ферму для рассылки спама всем, не зная чьих-либо адресов электронной почты. 20 лет назад это было бы непостижимо.
Провайдеры бесплатной электронной почты не раз продавали свои бесплатные учетные записи своим рекламодателям. В прошлом простая регистрация бесплатной учетной записи электронной почты автоматически гарантировала им зеленый свет, чтобы начать рассылку спама на этот адрес электронной почты ... без использования этого адреса электронной почты в Интернете. Я видел это несколько раз с известными названиями компаний. (Я не буду называть никаких имен.)
Ключевое слово mailto: является частью этого IETF RFC , в котором браузеры созданы для автоматического запуска почтовых клиентов по умолчанию из ссылок с этим ключевым словом в них. Если это произойдет, необходимо использовать JavaScript, чтобы прервать процесс запуска приложения.
Я не думаю, что можно полностью остановить рассылку спама при использовании традиционных почтовых серверов без использования фильтров на почтовом сервере и, возможно, изображений.
Есть одна альтернатива ... Вы также можете создать почтовый клиент, похожий на чат, который работает внутри веб-сайта. Это было бы похоже на чат-клиент Facebook. Это «вроде как электронная почта», но на самом деле это не электронная почта. Это просто обмен мгновенными сообщениями один на один с функцией архивирования ... которая автоматически загружается при входе в систему. Поскольку в нем есть вложение документа + ссылка, он работает как электронная почта ... но без спама. Пока вы не создаете API, доступный извне, это закрытая система, в которую люди не могут отправлять спам.
Если вы планируете придерживаться строго традиционной электронной почты, то лучшим вариантом может быть запуск чего-то вроде Apache SpamAssassin на почтовом сервере компании.
Вы также можете попробовать комбинировать несколько стратегий, перечисленных выше, чтобы сборщикам электронной почты было сложнее собирать адреса электронной почты с ваших веб-страниц. Они не остановят 100% спама, 100% времени ... а также позволяют 100% программ чтения с экрана работать для слепых посетителей.
Вы создали действительно хороший стартовый взгляд на то, что не так с традиционной электронной почтой! Престижность вам за это!
Хорошим средством чтения с экрана является JAWS от Freedom Scientific . Я использовал это раньше, чтобы слушать, как мои веб-страницы читают слепые пользователи. (Если вы слышите мужской голос, читающий оба действия [например, нажатие на ссылку] и текст, попробуйте изменить один голос на женский, чтобы один голос читал действия, а другой - текст. Это облегчит понимание того, как читается веб-страница. слабовидящим.)
Удачи в ваших усилиях по противодействию сбору адреса электронной почты !
источник
Вот подход, в котором действительно используется JavaScript, но с довольно небольшим следом. Это также очень "гетто", и в целом я бы не рекомендовал подход со встроенным JS в HTML, за исключением того, что вы вообще крайне неохотно используете JS.
<a href="#" data-contact="bGUtZW1haWxAdGhlLWRvbWFpbi5jb20=" data-subj="QW4gQW1hemluZyBTdWJqZWN0" onfocus="this.href = 'mailto:' + atob(this.dataset.contact) + '?subject=' + atob(this.dataset.subj || '')" > Send an email </a>
data-contact
- это адрес электронной почты в кодировке base64. Иdata-subj
это необязательный объект в кодировке base64.Основная проблема при выполнении этого без JS заключается в том, что CSS не может изменять атрибуты HTML. ( Статья, на которую вы ссылаетесь, представляет собой размышление о "пироге в небе" и не имеет никакого отношения к тому, что возможно сегодня или в ближайшем будущем.)
Упомянутый вами подход HTML-сущностей или его разновидность, вероятно, является самым простым вариантом, который будет иметь некоторую эффективность. Кроме того,
iframe
подход продуман, а подход перенаправления сервера довольно хорош. Но все три уязвимы для ботов:При описанном выше подходе использование адреса электронной почты в кодировке base64 в
data-contact
атрибуте является очень "разовым" - если парсер не предназначен специально для вашего сайта, он должен работать.источник
Простой + Много @ + Редактируется без инструментов
<a href="mailto:user@domain@@com" onmouseover="this.href=this.href.replace('@@','.')"> Send email </a>
источник
Вы рассматривали возможность использования Google Recaptcha mailhide? https://www.google.com/recaptcha/admin#mailhide
Идея заключается в том, что когда пользователь устанавливает флажок ( см. Nocaptcha ниже ), отображается полный адрес электронной почты.
Хотя рекапча традиционно сложна не только для программ чтения с экрана, но и для людей, с ролевой функцией рекапчи google nocaptcha, о которой вы можете прочитать здесь, поскольку они относятся к тестам доступности. Это выглядит многообещающим в отношении программ чтения с экрана, поскольку с их точки зрения отображается как традиционный флажок.
Пример №1 - Небезопасно, но для простой иллюстрации идеи
Вот пример кода без использования mailhide, но реализация чего-то с использованием recaptcha самостоятельно: https://jsfiddle.net/43fad8pf/36/
<div class="container"> <div id="recaptcha"></div> </div> <div id="email"> Verify captcha to get e-mail </div> function createRecaptcha() { grecaptcha.render("recaptcha", {sitekey: "6LcgSAMTAAAAACc2C7rc6HB9ZmEX4SyB0bbAJvTG", theme: "light", callback: showEmail}); } createRecaptcha(); function showEmail() { // ideally you would do server side verification of the captcha and then the server would return the e-mail document.getElementById("email").innerHTML = "email@something.com"; }
Примечание: в моем примере у меня есть электронная почта в функции javascript. В идеале рекапча должна быть проверена на стороне сервера и возвращено электронное письмо, в противном случае бот может просто получить его в коде.
Пример # 2 - Проверка на стороне сервера и возврат электронной почты
Если мы воспользуемся подобным примером, мы получим дополнительную безопасность: https://designracy.com/recaptcha-using-ajax-php-and-jquery/
function showEmail() { /* Check if the captcha is complete */ if ($("#g-recaptcha-response").val()) { $.ajax({ type: ‘POST’, url: "verify.php", // The file we’re making the request to dataType: ‘html’, async: true, data: { captchaResponse: $("#g-recaptcha-response").val() // The generated response from the widget sent as a POST parameter }, success: function (data) { alert("everything looks ok. Here is where we would take 'data' which contains the e-mail and put it somewhere in the document"); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("You’re a bot"); } }); } else { alert("Please fill the captcha!"); } });
Где verify.php:
$captcha = filter_input(INPUT_POST, ‘captchaResponse’); // get the captchaResponse parameter sent from our ajax /* Check if captcha is filled */ if (!$captcha) { http_response_code(401); // Return error code if there is no captcha } $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR-SECRET-KEY-HERE&amp;response=" . $captcha); if ($response . success == false) { echo ‘SPAM’; http_response_code(401); // It’s SPAM! RETURN SOME KIND OF ERROR } else { // Everything is ok, should output this in json or something better, but this is an example echo 'email@something.com'; }
источник
Люди, которые пишут скреперы, хотят сделать свои скребки максимально эффективными. Поэтому они не будут загружать стили, скрипты и другие внешние ресурсы. Я не знаю способа установить
mailto
ссылку с помощью CSS. Кроме того, вы специально сказали, что не хотите устанавливать ссылку с помощью Javascript.Если вы думаете о том, какие еще типы ресурсов существуют, есть также внешние документы (например, HTML-документы, использующие фреймы). Практически никакие парсеры не потрудились бы загрузить содержимое фреймов. Поэтому вы можете просто сделать:
index.html:
<iframe src="frame.html" style="height: 1em; width: 100%; border: 0;"></iframe>
frame.html:
My email is <a href="mailto:me@example.com" target="_top">me@example.com</a>
Для пользователей-людей iframe выглядит как обычный текст. По умолчанию фреймы встроены и прозрачны, поэтому нам просто нужно установить его границу и размеры. Вы не можете заставить размер iframe соответствовать размеру его содержимого без использования Javascript, поэтому лучшее, что мы можем сделать, - это указать ему предопределенные размеры.
источник
Во-первых, я не думаю, что что-то с помощью CSS будет работать. Все боты (кроме краулера Google) просто игнорируют все стили на веб-сайтах. Любое решение должно работать с JS или на стороне сервера.
Решение на стороне сервера может заключаться в создании
<a>
ссылки на новую вкладку, которая просто перенаправляет на желаемоеmailto
:На данный момент это все мои идеи. Надеюсь, поможет.
источник
mailto:
как местоположение в перенаправлении 302 исчезает из соображений "безопасности", так как вы уже не можете этогоfile:
больше. (При этом мы используем это перенаправление как запасной вариант, когда javascript отключен.)Короткий ответ для выполнения всех ваших требований - это невозможно
Некоторые варианты, основанные на сценариях, на которые даны ответы здесь, могут работать для определенных ботов, но вам не нужен сценарий, поэтому нет, вы не можете.
источник
Решение PHP
function printEmail($email){ $email = '<a href="mailto:'.$email.'">'.$email.'</a>'; $a = str_split($email); return "<script>document.write('".implode("'+'",$a)."');</script>"; }
Использовать
echo printEmail('test@gmail.com');
Результат
<script>document.write('<'+'a'+' '+'h'+'r'+'e'+'f'+'='+'"'+'m'+'a'+'i'+'l'+'t'+'o'+':'+'t'+'e'+'s'+'t'+'@'+'g'+'m'+'a'+'i'+'l'+'.'+'c'+'o'+'m'+'"'+'>'+'t'+'e'+'s'+'t'+'@'+'g'+'m'+'a'+'i'+'l'+'.'+'c'+'o'+'m'+'<'+'/'+'a'+'>');</script>
PS Требование: у пользователя должен быть включен JavaScript
источник
Один из эффективных способов - использовать его с CSS, как показано ниже:
<a href="mailto:myemail@ignore-domain.com">myemail@<span style="display:none;">ignore-</span>domain.com
а затем напишите javascript, чтобы удалить
ignoreme-
слово изhref="mailto:..."
атрибута с помощью регулярного выражения. Это скроет электронную почту от бота, так как она добавитignore-
слово перед реальным доменом, и это будет работать в программе чтения с экрана, и когда пользователь нажимает на ссылку, пользовательская функция js удаляетignore-
слово изhref
атрибута, чтобы открыть настоящее письмо.Этот метод до сих пор работал у меня очень эффективно. вы можете узнать больше об этом - http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/
источник
a href
. Использованиеdisplay:none
не принесет успеха.