Скрыть адрес электронной почты от ботов - Хранить mailto:

TL;DR

Скрыть адрес электронной почты от ботов без использования сценариев и поддерживать функциональность mailto:. Метод также должен поддерживать экранные программы.


Резюме

  • Электронная почта obfuscation без с помощью скриптов или контактных форм

  • Адрес электронной почты должен быть полностью видимым для зрителей и поддерживать mailto: функциональность

  • Адрес электронной почты не должен быть в форме изображения.

  • Адрес электронной почты должен быть полностью скрыт от спам-роботов и спам-ботов и любого другого типа харвестера


Желаемый эффект:

  • Нет скриптов, пожалуйста. В проекте нет скриптов, а я хотел бы сохранить его таким образом.

  • Адрес электронной почты либо отображается на странице, либо может быть легко отображен после какого-либо взаимодействия с пользователем, например, открытия модального файла.

  • Пользователь может нажать на адрес электронной почты, который, в свою очередь, вызовет функциональность mailto:.

  • Щелчок по электронной почте откроет приложение электронной почты пользователя.

    Другими словами, функциональность mailto: должна работать.

  • Адрес электронной почты не отображается или не идентифицируется как адрес электронной почты для ботов (сюда входит источник страницы)

  • У меня нет почтового ящика с полным спамом


Что НЕ работает

  • Добавление формы контакта - или чего-либо подобного - вместо адреса электронной почты

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

  • Замена адреса изображением адреса

    Это создает недостаток HUGE для кого-то, использующего прошивку (, пожалуйста, помните о слабовидящих в будущих проектах)

    Он также удаляет функциональность mailto:, если вы не сделаете изображение кликабельным, а затем добавьте функциональность mailto: как href для этой ссылки, но побеждает цель, и теперь письмо видно ботам.


Что может работать:

  • Умное использование pseudo-elements в CSS

  • Решения, использующие кодировку base64

  • Разрыв адреса электронной почты и распространение частей по документу, а затем их объединение в модальном режиме, когда пользователь нажимает кнопку (это, вероятно, будет включать несколько классов CSS и использование anchor tags)

  • Изменение атрибутов html через CSS

    @MortezaAsadi изящно раскрыл эту возможность в комментариях ниже. Это ссылка на полный текст. Статья с 2012 года:

    Что делать, если мы могли бы использовать CSS для изменения атрибутов HTML?

  • Другие творческие решения, выходящие за рамки моих знаний.


Похожие вопросы/исправления

(Это замечательное решение, предложенное Джо Маллером, оно работает хорошо, но script на основе. Вот как оно выглядит:

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

Ответ 1

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

Кроме того, точка атрибута mailto должна быть стандартом того, как делать адреса электронной почты в Интернете. Если у вас есть второй способ сделать это, попросите, есть ли второй стандарт.

Выполнение скриптов по-прежнему будет иметь ту же проблему, что и при загрузке страницы, был запущен script и адрес электронной почты, отображаемый в DOM (если вы не заполнили адрес электронной почты кликом или чем-то еще). В любом случае, у читателей экрана все еще есть проблемы с этим, поскольку он еще не загружен.

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

<a href="mailto:[email protected]?subject=Something to filter on">Email me</a>

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

Ответ 2

Победить ботов по электронной почте сложно. Вы можете захотеть проверить раздел "Отслеживание адресов электронной почты" в Википедии.

Моя предыстория заключается в том, что я написал поискового робота. Он просканировал 105 000+ URL-адресов во время его первоначального запуска много лет назад. Из того, что я узнал от этого, это то, что веб-сканеры ботов буквально видят ВСЕ, это текст, который появляется на веб-странице. Боты читают все, кроме изображений.

Спам не может быть легко остановлен по коду по следующим причинам:

  • CSS и JS не имеют значения при использовании тега mailto:. Боты специально рассматривают HTML-страницы для этого ключевого слова "mailto:". Все от этой двоеточия до следующей отдельной цитаты или двойной цитаты (в зависимости от того, что наступит раньше) рассматривается как адрес электронной почты. Адреса электронной почты объекта HTML, как и выше, могут быть быстро переведены с использованием обратного ASCII-метода/функции. Запуск фрагмента кода JavaScript выше, быстро превращает строку, которая начинается с: & # 121; & # 111; & # 117; & # 114;... в... "[email protected]". (Мой поисковик бросил hrefs с mailto: адреса электронной почты, так как мне нужны URL-адреса для веб-страниц, а не адреса электронной почты.)

  • Если страница разбивает бота, автор бота настроит бота, чтобы исправить ошибку с этой страницей, чтобы бот не сработал на этой странице снова в будущем. Таким образом, их бот умнее.

  • Авторы Bot могут писать боты, которые генерируют все известные варианты адресов электронной почты... без обхода страниц и никогда не используют стартовые адреса электронной почты. Хотя это не представляется возможным, это немыслимо с сегодняшними высокопроизводительными процессорами подсчета (которые имеют гиперпоточность и работают на частоте 4+ ГГц), плюс доступность использования распределенных облачных вычислений и даже суперкомпьютеров. Возможно, кто-то теперь может создать ботовую ферму, чтобы спамить всех, не зная ни одного адреса электронной почты. 20 лет назад это было бы непонятно.

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

  • Ключевое слово mailto: это часть IETF RFC, где браузеры созданы для автоматического запуска почтовых клиентов по умолчанию, из ссылок с этим ключевым словом в них. JavaScript должен использоваться для прерывания процесса запуска приложения, когда это произойдет.

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

Существует одна альтернатива... Вы также можете создать клиентский почтовый клиент, который работает внутри сайта на веб-сайте. Это будет как клиент чата Facebook. Это "вроде как электронная почта", но не действительно электронная почта. Это просто 1-к-1 мгновенный обмен сообщениями с функцией архивирования..., которая автоматически загружается при входе в систему. Так как у него есть возможности прикрепления документа + ссылки, он работает как электронная почта... но без спама. Пока вы не создаете внешний API, тогда это закрытая система, в которой люди не могут отправлять спам в нее.

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

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

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

Хороший экранный ридер JAWS от Freedom Scientific. Я использовал это раньше, чтобы прослушать, как мои веб-страницы читаются слепыми пользователями. (Если вы слышите мужской голос, читающий оба действия (например, щелчок по ссылке) и текст, попробуйте изменить 1 голос на женский, чтобы 1 голос читал действия, а другой читал текст. Это облегчает восприятие того, как просматривается веб-страница визуально пострадавших.)

Удачи с вашей Адрес электронной почты Консоль по сбору урожая прилагается!

Ответ 3

Вот подход, который использует 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>

Ответ 4

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

Если вы думаете о том, какие существуют другие типы ресурсов, есть и внешние документы (т.е. документы HTML с использованием iframes). Почти никакие скребки не будут загружать содержимое фреймов. Поэтому вы можете просто сделать:

index.html

<iframe src="frame.html" style="height: 1em; width: 100%; border: 0;"></iframe>

frame.html:

My email is <a href="mailto:[email protected]" target="_top">[email protected]</a>

Для пользователей, iframe выглядит как обычный текст. Iframes являются встроенными и прозрачными по умолчанию, поэтому нам просто нужно установить его границу и размеры. Вы не можете сделать размер iframe соответствующим его размеру содержимого без использования Javascript, поэтому лучше всего сделать это предопределенные размеры.

Ответ 5

Во-первых, я не думаю, что что-то с CSS будет работать. Все боты (кроме Google crawler) просто игнорируют все стили на веб-сайтах. Любое решение должно работать с JS или сервером.

Решение на стороне сервера может сделать <a>, который ссылается на новую вкладку, которая просто перенаправляет на желаемый mailto:

Что все мои идеи на данный момент. Надеюсь, что это поможет.

Ответ 6

Простой + Лот @+ Редактируемый без инструментов

<a href="mailto:[email protected]@@com"
   onmouseover="this.href=this.href.replace('@@','.')">
   Send email
</a>

Ответ 7

Короткий ответ для выполнения всех ваших требований заключается в том, что невозможно

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

Ответ 8

Считаете ли вы использование google recaptcha mailhide? https://www.google.com/recaptcha/admin#mailhide

Идея заключается в том, что, когда пользователь нажимает этот флажок (см. nocaptcha ниже), отображается полный адрес электронной почты.

В то время как recaptcha традиционно не только трудно для чтения с экрана, но также и для людей, а также с развязкой google nocaptcha recaptcha, которую вы можете прочитать о  здесь, поскольку они касаются тестов доступности. Похоже, что он пообещал в отношении экранных читателей, поскольку он представляет собой традиционный флажок с их точки зрения. Nocaptcha reCAPTCHA

Пример # 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 protected]";
}

Примечание. В моем примере у меня есть электронная почта в функции javascript. В идеале у вас будет recaptcha, подтвержденная на сервере, и верните электронное письмо, иначе бот может просто получить его в коде.

Пример # 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;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 protected]'; 
}

Ответ 9

Один из методов, который я нашел эффективным, использует его с помощью css, как показано ниже:

<a href="mailto:[email protected]">[email protected]<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/