在网页上设置电子邮件地址是否安全?

时间:2008-10-02 17:45:04

标签: email obfuscation

在网页上放置电子邮件地址时,请将它们放置为如下文本:

joe.somebody@company.com

或使用聪明的伎俩来试图欺骗电子邮件地址收割机机器人?例如:

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("êïå®óïíåâïäùÀãïíðáîù®ãïí");

人体解码:

joe.somebodyNOSPAM@company.com

joe.somebody AT company.com

你使用什么,或者你甚至打扰?

22 个答案:

答案 0 :(得分:47)

我一般都不打扰。我曾经在一个邮件列表上,每天都有数千个垃圾邮件。我们的垃圾邮件过滤器(spamassassin)每天可能需要1或2个。过滤器这个好,为什么合法的人很难联系到你?

答案 1 :(得分:26)

制作您自己的疯狂电子邮件地址混淆方案。无论它是什么,真的,只要它与任何众所周知的方法都不太相似。

问题在于,确实没有一个好的解决方案,它们要么相对简单地绕过,要么对用户感到恼火。如果任何一种方法变得普遍,那么某人找到解决方法。

因此,不是寻找One True电子邮件地址混淆技术,而是提出自己的想法。依靠这些机器人作者对你的网站不够关心这个事实来围绕你写一个东西来绕过你稍微疯狂的渲染 - 文本与css和元素边界或你完全奇怪,容易破解的javascript加密这一事实。如果它是微不足道的并不重要,没有人会费心试图绕过它只是为了让他们发送垃圾邮件。

答案 2 :(得分:16)

我写了一个encodersource),它使用了我能想到的各种解析技巧(不同种类的HTML实体,URL编码,注释,多行属性,软连字符, mailto的非显而易见的结构:URL等)

它不会阻止所有收割机,但OTOH完全符合标准且对用户透明。

另一种恕我直言的好方法(除了棘手的编码之外你还可以使用它)沿着以下几行:

<a href="mailto:userhatestogetspam@example.com" 
   onclick="this.href=this.href.replace(/hatestogetspam/,'')">

答案 3 :(得分:15)

您可以使用reCAPTCHA保护您的电子邮件地址,他们提供免费服务,因此用户必须输入CAPTCHA(完全自动公共图灵测试以告知计算机和人类)以查看您的电子邮件:https://www.google.com/recaptcha/admin#mailhide

答案 4 :(得分:7)

我不会打扰 - 它正在以错误的水平对抗SPAM战争。特别是对于公司网站,我认为如果除了带有mailto超链接的页面上的直接文本以外的任何内容,它会使事情变得非常不专业。

有太多垃圾邮件飞来飞去,无论如何你需要很好的过滤,而且任何机器人最终都会理解所有常见的技巧。

答案 5 :(得分:5)

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;
    });
});

答案 6 :(得分:3)

我不打扰。你只会惹恼老练的用户并混淆不熟练的用户。正如其他人所说,Gmail为个人/小型企业域提供了非常有效的垃圾邮件过滤器,企业过滤器通常也非常好。

答案 7 :(得分:2)

请改用联系表格。将您的所有电子邮件地址放入数据库并创建一个HTML表单(主题,正文,来自...),提交用户在表单中填写的电子邮件内容(以及用于的用户名或名称)在数据库中查找该人员的电子邮件地址)到服务器端脚本,然后向指定人员发送电子邮件。电子邮件地址从未暴露过。您可能希望实施某种形式的CAPTCHA来阻止垃圾邮件。

答案 8 :(得分:2)

我的response类似问题:

  

我使用CSS和jQuery的非常简单的组合来显示   电子邮件地址正确地给用户,并且在锚点时也可以   点:

     

HTML:

<a href="mailto:me@example.spam" 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);
});
     

Here是一个有效的例子。

答案 9 :(得分:2)

唯一最安全的方法当然不是首先将电子邮件地址放在网页上。

答案 10 :(得分:1)

免费的Gmail有一个很棒的垃圾邮件过滤器。

如果您不想直接使用Gmail,可以将电子邮件发送到Gmail,并使用gmail转发功能在邮件通过垃圾邮件过滤器后将其发回给您。

在更复杂的情况下,当您需要显示@ business.com地址时,您可以显示public@business.com并将所有这些邮件转发到gmail帐户,然后将其转发回真正的@ business。 COM

我想这不是你问题的直接解决方案,但它可能有所帮助。 Gmail是免费的并拥有如此优秀的垃圾邮件过滤器,因此使用它是一个非常明智的选择恕我直言。

我的gmail帐户每天收到大约100封垃圾邮件,但我不记得上次有人收到我的收件箱了。

总而言之,无论是Gmail还是其他,都要使用优质的垃圾邮件过滤器。让用户重新键入或修改显示的电子邮件地址就像使用DRM来防止盗版一样。把负担放在“好”的人身上不应该是做任何事情的方法。 :)

答案 11 :(得分:1)

我把我的东西都给了DOC @whatever.com然后在旁边我写了“删除大写字母”

答案 12 :(得分:1)

对于您自己的电子邮件地址,我建议您不要过于担心。如果您需要向数千名用户提供您的电子邮件地址,那么我建议使用Gmail地址(香草或谷歌应用程序)或使用高质量的垃圾邮件过滤器。

但是,在您的网站上显示其他用户的电子邮件地址时,我认为需要进行一定程度的尽职调查。幸运的是,一位名叫SilvanMühlemann的博主有done all the difficult work for you。他在1。5年的时间里测试了不同的混淆方法,并确定了最好的混淆方法,其中大多数涉及css或javascript技巧,允许在浏览器中正确显示地址,但会混淆自动刮刀。

答案 13 :(得分:1)

尝试使用电子邮件图标生成器。 http://services.nexodyne.com/email/

当然还有一些OCR机器人可能会得到这个......

答案 14 :(得分:0)

将电子邮件地址保存到png文件的脚本将是一种安全的解决方案(如果您有足够的空间并且允许您在页面中嵌入图像)

答案 15 :(得分:0)

这就是我们使用的(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

我们覆盖渲染并在它出门之前运行传出的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>

显然不是万无一失,但希望减少一定数量的收获,而不会给游客带来困难。

答案 16 :(得分:0)

另一种可能是独特的技术可能是使用多个图像和一些纯文本字母来显示地址。这可能会混淆机器人。

答案 17 :(得分:0)

这取决于您的需求究竟是什么。对于我工作的大多数网站,我发现放入“联系我/我们”表格更有用,该表格从系统向需要联系的任何人发送电子邮件。我知道这不是你正在寻求的解决方案,但它完全防止收获,到目前为止我从未见过通过这样的形式发送的垃圾邮件。它会发生,但它非常罕见,你永远不会被收获。

如果您愿意,这也让您有机会在发送消息之前记录消息,从而为您提供额外的保护,防止丢失联系人。

答案 18 :(得分:0)

随着时间的推移,垃圾邮件机器人将拥有自己的Javascript和CSS引擎,所以我认为你不应该朝这个方向看。

答案 19 :(得分:0)

选项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而不是“。”

即:

 info(AT)XXXabc(DOT)com 

答案 20 :(得分:0)

我刚编了以下代码。不知道它是否好,但它只是用纯文本写电子邮件更好。许多机器人将被愚弄,但不是全部。

<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?'@':'')”或者以另一种顺序添加数组元素,因为机器人只是逃避代码无论如何。

答案 21 :(得分:0)

字体很棒!

backlog(128)

http://fontawesome.io/