Как защитить почтовые адреса от ботов на веб-странице?

При размещении адресов электронной почты на веб-странице вы размещаете их как текст следующим образом:

[email protected]

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

Символы Escape HTML:

joe.somebody@company.com

Javascript Decrypter:

function XOR_Crypt(EmailAddress)
{
    Result = new String();
    for (var i = 0; i < EmailAddress.length; i++)
    {
        Result += String.fromCharCode(EmailAddress.charCodeAt(i) ^ 128);
    }
    document.write(Result);
}

XOR_Crypt("êïå®óïíåâïäùÀãïíðáîù®ãïí");

Человеческий декод:

[email protected]

joe.somebody AT company.com

Что вы используете или вы даже беспокоитесь?

Ответ 1

Я вообще не беспокоюсь. Раньше я был в списке рассылки, который ежедневно получал несколько тысяч спама. Наш спам-фильтр (spamassassin) позволяет, возможно, 1 или 2 раза в день. С фильтрами это хорошо, почему мешает законным людям связаться с вами?

Ответ 2

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

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

Итак, вместо того, чтобы искать метод обфускации One True email address, придумайте свой собственный. Подсчитайте на то, что эти авторы-боты не заботятся о вашем сайте, чтобы сидеть вокруг, питая что-нибудь, чтобы обойти ваши слегка сумасшедшие границы рендеринга-текста-с-css-и-element или ваш совершенно причудливый, легко взломанный javascript-шифрование, Неважно, если это тривиально, никто не будет пытаться обойти его, чтобы они могли спамить вас.

Ответ 3

Я написал encoder (source), который использует всевозможные аналитические трюки, о которых я мог думать (различные типы объектов HTML, кодировка URL, комментарии, многострочные атрибуты, мягкие дефисы, неочевидная структура mailto: URL и т.д.)

Он не останавливает всех комбайнов, но OTOH полностью совместим со стандартами и прозрачен для пользователей.

Еще один хороший подход IMHO (который вы можете использовать в дополнение к сложному кодированию) состоит из следующих строк:

<a href="mailto:[email protected]" 
   onclick="this.href=this.href.replace(/hatestogetspam/,'')">

Ответ 4

Вы можете защитить свой адрес электронной почты с помощью reCAPTCHA, они предлагают бесплатный сервис, поэтому люди должны ввести CAPTCHA (полностью автоматизированный публичный тест Тьюринга, чтобы сообщить "Компьютеры и люди" ), чтобы увидеть ваш адрес электронной почты: https://www.google.com/recaptcha/admin#mailhide

Ответ 5

Я бы не стал беспокоиться - он сражается с войной СПАМ на неправильном уровне. В частности, для веб-сайтов компании я считаю, что это делает вещи очень непрофессиональными, если у вас есть что-то другое, кроме прямого текста на странице с гиперссылкой mailto.

Слишком много спама, вокруг которого вам нужна хорошая фильтрация, и любой бот все равно поймет все общие трюки.

Ответ 6

HTML:

<a href="#" class="--mailto--john--domain--com-- other classes goes here" />

JavaScript, используя jQuery:

// match all a-elements with "--mailto--" somehere in the class property
$("a[class*='--mailto--']").each(function ()
{
    /*
    for each of those elements use a regular expression to pull
    out the data you need to construct a valid e-mail adress
    */
    var validEmailAdress = this.className.match();

    $(this).click(function ()
    {
        window.location = validEmailAdress;
    });
});

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

A ответ по моему вопросу:

Я использую очень простую комбинацию 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);
});

Здесь является рабочим примером.

Ответ 11

Попробуйте генератор значков электронной почты. http://services.nexodyne.com/email/

Конечно, есть еще некоторые боты OCR, которые могут получить это.

Ответ 12

Я делаю мой [email protected], а затем рядом с ним пишу "Удалить заглавные буквы"

Ответ 13

Gmail, который является бесплатным, имеет удивительный спам-фильтр.

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

В более сложной ситуации, когда вам нужно показать адрес @business.com, вы можете показать [email protected] и отправить всю эту почту в аккаунт gmail, который затем перенаправляет его в реальный бизнес. ком

Я предполагаю, что это не прямое решение вашего вопроса, но это может помочь. Gmail, свободный и имеющий такой хороший фильтр СПАМ, делает его очень мудрым выбором ИМХО.

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

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

Ответ 14

Для вашего собственного адреса электронной почты я бы рекомендовал не беспокоиться об этом слишком много. Если у вас есть необходимость сделать ваш адрес электронной почты доступным для тысяч пользователей, я бы рекомендовал либо использовать адрес gmail (ваниль или приложения Google), либо использовать фильтр спама высокого качества.

Однако при отображении адресов других пользователей на вашем веб-сайте я думаю, что необходим определенный уровень должной осмотрительности. К счастью, блоггер по имени Сильван Мюлеманн . Он проверил различные методы обфускации в течение 1,5 лет и определил лучшие, большинство из них связаны с трюками css или javascript, которые позволяют правильно адресовать адрес в браузере, но будут путать автоматические скребки.

Ответ 15

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

Ответ 16

A script, который сохраняет адреса электронной почты в png файлах, будет безопасным решением (если у вас достаточно места, и вам разрешено вставлять изображения на вашу страницу)

Ответ 17

Это то, что мы используем (VB.NET):

Dim rxEmailLink As New Regex("<a\b[^>]*mailto:\b[^>]*>(.*?)</a>")
Dim m As Match = rxEmailLink.Match(Html)
While m.Success
    Dim strEntireLinkOrig As String = m.Value
    Dim strEntireLink As String = strEntireLinkOrig
    strEntireLink = strEntireLink.Replace("'", """") ' replace any single quotes with double quotes to make sure the javascript is well formed
    Dim rxLink As New Regex("(<a\b[^>]*mailto:)([\w.\-_^@]*@[\w.\-_^@]*)(\b[^>]*?)>(.*?)</a>")
    Dim rxLinkMatch As Match = rxLink.Match(strEntireLink)
    Dim strReplace As String = String.Format("<script language=""JavaScript"">document.write('{0}{1}{2}>{3}</a>');</script>", _
                RandomlyChopStringJS(rxLinkMatch.Groups(1).ToString), _
                ConvertToAsciiHex(rxLinkMatch.Groups(2).ToString), _
                rxLinkMatch.Groups(3), _
                ConvertToHtmlEntites(rxLinkMatch.Groups(4).ToString))
    Result = Result.Replace(strEntireLinkOrig, strReplace)
    m = m.NextMatch()
End While

и

    Public Function RandomlyChopStringJS(ByVal s As String) As String
        Dim intChop As Integer = Int(6 * Rnd()) + 1
        Dim intCount As Integer = 0
        RandomlyChopStringJS = ""
        If Not s Is Nothing AndAlso Len(s) > 0 Then
            For Each c As Char In s.ToCharArray()
                If intCount = intChop Then
                    RandomlyChopStringJS &= "'+'"
                    intChop = Int(6 * Rnd()) + 1
                    intCount = 0
                End If
                RandomlyChopStringJS &= c
                intCount += 1
            Next
        End If
    End Function

Мы переопределяем Render и запускаем исходящий HTML через это, прежде чем он выйдет за дверь. Это отображает адреса электронной почты, которые обычно отображаются в браузере, но выглядят следующим образом:

<script language="JavaScript">document.write('<a '+'clas'+'s='+'"Mail'+'Link'+'" hr'+'ef'+'="ma'+'ilto:%69%6E%66%6F%40%62%69%63%75%73%61%2E%6F%72%67">&#105;&#110;&#102;&#111;&#64;&#98;&#105;&#99;&#117;&#115;&#97;&#46;&#111;&#114;&#103;</a>');</script>

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

Ответ 18

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

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

Ответ 19

Спам-боты со временем будут иметь свои Javascript и CSS-механизмы, поэтому я думаю, что вы не должны смотреть в этом направлении.

Ответ 20

Вариант 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 

Ответ 21

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

<script type="text/javascript">
    $(function () {
        setTimeout(function () {
            var m = ['com', '.', 'domain', '@', 'info', ':', 'mailto'].reverse().join('');

            /* Set the contact email url for each "contact us" links.*/
            $('.contactUsLink').prop("href", m);
        }, 200);
    });
</script>

Если робот решит это, тогда нет необходимости добавлять более "простой логический" код, например "if (1 == 1? '@': '')" или добавление элементов массива в другом порядке, поскольку робот просто оценивает код в любом случае.

Ответ 22

Шрифт-удивительные работы!

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

<p>myemail<i class="fa fa-at" aria-hidden="true"></i>mydomain.com</p>

http://fontawesome.io/