网站上保护电��邮件免受垃圾邮件机器人攻击的方法有哪些?

12
我正在创建一个公共的互联网面向网站,其中包含他们销售人员的电子邮件地址。
有什么编程选项可以生成"mailto"并显示该地址的电子邮件,但限制垃圾邮件机器人获取该地址?
14个回答

10

很遗憾,由于新版本的reCAPTCHA,这个功能已经不存在了。 - lorenzli
@lorenzli:是的,它可以。我几周前就用它更改了我的网站电子邮件。现在在tech.dolhub.com上。 - Lawrence Dol
@LawrenceDol https://google.com/recaptcha/mailhide/ 返回 404 错误,如 /admin/ 等子目录被重定向到新网站而没有 mailhide 功能。 - lorenzli
1
@Lorenzli 我通过简单搜索找到了Mailhide页面。我已经在我的回答中添加了链接。 - Lawrence Dol
截至2022年,Google提供的依赖于reCAPTCHA的Mailhide服务已经不存在了,而且已经有一段时间了。现在唯一的Mailhide服务是第三方服务,我个人对此持怀疑态度,因为他们网站上的版权页脚自2018年以来就没有更新过。这可能只是一个小事情,但如果他们连这么小的事情都做不好,我怀疑他们能否在现代网络上完成电子邮件混淆这样复杂的事情。 - Hashim Aziz

7
我知道脸书使用图片代替文本来做到这一点。当然,他们可以对图片进行OCR识别,但仅为了一个电子邮件地址是否值得呢?
如果你确实不想让垃圾邮件机器人获取电子邮件地址,最好的方法是永远不向任何人显示它。显示一个名为“联系此人”的链接,该链接会弹出一个表单。在服务器端,将该表单的内容发送给收件人,并将答复地址设置为发件人的电子邮件地址。在他们的消息底部包含一小段话,“如果此电子邮件是垃圾邮件,请点击此处阻止此用户”,这将会阻止发件人的IP。我已经在许多场合使用过这种方法,从未收到过任何投诉。

如果发件人输错了他们的电子邮件地址会发生什么? - danmine
太糟糕了,我想。如果您的用户有账户,您可以预填发送者的姓名和电子邮件地址。 - nickf
6
我更可能会写电子邮件,而不是填写表格。 - Georg Schölly
你在第二段提到的方法很好,但有时这些电子邮件会被自动过滤并发送到垃圾邮件文件夹中。在这种情况下,存在收件人永远看不到消息的风险。 - pablofiumara

4

您可以对其进行混淆,但在我看来,无论您做什么,有一天垃圾邮件发送者都会获得您的电子邮件地址。未来在于垃圾邮件过滤器,而不是试图保密电子邮件地址。


1
然而,你越努力地在一开始就混淆它、从根本上解决问题,你在整个网站的寿命中削减垃圾邮件的工作就会越少。 - Hashim Aziz

3
过去我所做的是使用JavaScript构建mailto:链接。这对用户来说很好,因为他们只需单击链接,我不知道有任何垃圾邮件机器人会花时间执行JavaScript。 我想我从Jakob Nielsen的useit.com网站上得到了这个想法。 在页面头部,我有这段JavaScript代码:
<script name="mailto" language="JavaScript">
    //<![CDATA[

    function load()
    {
        c1 = "bcl"
        c2 = "brian"
        c3 = "lane"
        c4 = "com"
        // Fill in the addresses
        document.getElementById("contact1").innerHTML = "<a href=" + "mail" + "to:" + c1 + "@" + c2 + c3 + "." + c4 + ">" + c1 + "@" + c2 + c3 + "." + c4 + "</a>";
    }
    //]]>

</script>

告诉它在页面加载时加载它:
<body onload="load()">

然后在页面正文中,我放了一个指向垃圾邮件陷阱的链接:

<span id="contact1"><a href="mailto:spam@brianlane.com">spam@brianlane.com</a></span>

1
这可能对简单的机器人起作用,但是一个理解足够JavaScript(或解析生成的源代码)的蜘蛛很容易收集电子邮件地址。 - Raymond Martineau
为了符合XHTML标准,您可以使用<和&。 - nickf
你认为这种方法对网站的索引有影响吗?谷歌是否应该索引电子邮件地址,还是不重要呢? - Saif Bechan
如果您想避免垃圾邮件,那么您绝对不希望Google或任何其他搜索引擎索引您的电子邮件地址。 - Hashim Aziz

1

看看 PrivateDaddy - 我认为它正好符合你的需求:完全自动化、不显眼的电子邮件保护,甚至可以在禁用 JavaScript 支持的浏览器中使用。你可以在这里获取它(当然是免费的)


我在一个社区网站上工作,其中有许多(10K+)用户生成的内容中包含电子邮件地址。本来打算实现一个服务器端解析代码和图像生成来解决这个问题,但最终使用Privatedaddy实现了它,并保留了数据不变。 - user249091
也许我错过了什么,但是 PrivateDaddy 的混淆似乎不仅没有混淆文本(这对某些人可能是有益的),而且它给出的示例似乎根本没有混淆任何内容。我按照它的建议检查了页面的源代码,发现完整的电子邮件地址在“mailto:”和文本形式中都显示出来了。 - Hashim Aziz

1
如果这不是一个静态的HTML页面,而是一个ASP.NET、JSP、Coldfusion或PHP页面,那么您可以有一个下拉框列出所有销售人员的列表,一个用于评论的文本框和一个“联系我们”(即提交按钮)。当单击该按钮时,它将调用服务器端代码创建电子邮件并将其发送到您的本地邮件服务器以进行投递。外部世界将永远不会知道您的销售人员的电子邮件地址,也不会知道您公司的电子邮件格式(即firstname.lastname@yourcompany.com)。

1
我有一个解决方案,或者更准确地说是一个理论。问题是,机器人会解析页面并获取文本,即使该文本是通过JavaScript以某种复杂的方式放置在页面中。因此,只需使用CSS3伪元素!这不会是一个链接,但您的电子邮件将可见,并且永远不会是实际文本。就像这样:
.email::after{ content:'myemail@gmail.com'; }

再说一遍,这只是一个理论,我不知道这些邪恶人物能为达到目的而走多远,但我认为这很安全。


更新(7月19日)

我认为这不是一个问题,因为电子邮件服务器已经很擅长过滤垃圾邮件,没有必要在网页上使用任何复杂的技巧来“保护”电子邮件文本。


0

我也遇到了同样的问题,但我想出了一种快速而有效的方法来帮助我的网站。

基本上,机器人只读取网页的内容,但在99.999%的情况下,它们不会触发事件,这需要大量的投入和工作,黑客通常不会为了更大的数字和更快的效果而这样做。

所以我想出了这个函数:

function emptyMail() {
    let mail = document.querySelector('#your_mail');
    let mailValue = mail.href;

    mail.href = "";

    mail.addEventListener('mouseover', function() {
      mail.href= mailValue;
    })
}

这对我有用,希望它也能帮到你。


0

0

你可以使用类似于电子邮件混淆的东西


2
我可能错了,但我相信现在这是低效的。我怀疑垃圾邮件发送者的网络爬虫已经能够解码实体,因为这个技巧现在已经广为人知了。 - PhiLho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接