在网站上混淆电子邮件地址的最佳方法是什么?

IT技术 javascript html email obfuscation
2021-01-26 11:48:25

过去几天我一直在努力更新我的个人网站。我个人网站的网址是(我的名字)。(我的姓氏).com,因为我的姓氏比较不寻常,我有幸拿到了域名。我的电子邮件地址是(我的名字)@(我的姓氏).com。所以说真的,当它归结为猜测时,这并不难。

无论如何,我想将一个mailto: 链接集成到我的网站中,以便人们可以与我联系。而且,尽管我的电子邮件地址不是很难猜到,但我宁愿它不会被垃圾邮件机器人收集,垃圾邮件机器人只会抓取网站以获取电子邮件地址模式并将它们添加到他们的数据库中。

混淆我的电子邮件地址的最佳方法是什么,最好是链接形式?我知道的方法有:

<a href="mailto:x@y.com">e-mail me</a>

它有效,但也意味着一旦我的网站访问 Google,我就会在垃圾邮件中涉水,因为垃圾邮件机器人很容易找出我的电子邮件地址。

<img src="images/e-mail.png" />

这不太理想,因为访问者不仅无法点击它向我发送电子邮件,而且更智能的垃圾邮件机器人可能能够检测到图像包含的字符。

我知道可能没有完美的解决方案,但我只是想知道每个人都认为什么是最好的。如有必要,我绝对愿意使用 JavaScript,因为我的网站已经使用了大量 JavaScript。

6个回答

我将字符编码为 HTML 实体(类似这样)。它不需要启用 JS 并且似乎已经阻止了大部分垃圾邮件。我想智能机器人可能仍然会收获它,但我没有遇到任何问题。

我知道这已经晚了,但值得指出的是,这里的建议是使用 HTML 实体,这与 URL 编码不同。根据该研究,将实体用于 @ 和句点是第二有效的方法(最有效的是三种方法并列第一,所有方法都产生了 0 条垃圾邮件)。看看这是否在近 6 年后仍然成立会很有趣。
2021-03-26 11:48:25
我觉得具有讽刺意味的是,为了保护您的电子邮件,您必须在链接到的站点上将其输入到一个随机的、看起来很阴暗的表格中。蜜罐,有人吗?:)
2021-04-02 11:48:25
根据2008 年的这项实证研究,URL 编码的效果次之。只有纯文本更糟糕。
2021-04-03 11:48:25
这个答案在 2019 年仍然适用吗?这种混淆方法好不好?
2021-04-05 11:48:25
这停止了​​最简单的垃圾邮件收集(正则表达式查找与电子邮件地址相似的任何文本),并且没有任何缺点:它与明确的 href=mailto:xxx@yy 链接一样方便最终用户。
2021-04-09 11:48:25

就个人而言,我已经放弃隐藏我的电子邮件地址。我发现寻找更好的垃圾邮件过滤解决方案比担心混淆更容易。您可能会花费数天时间试图找到混淆地址的最佳方法,然后只需一个人将您的地址出售给垃圾邮件发送者,所有这些工作都毫无用处。

我也只是发布了未经混淆的电子邮件。我使用 gmail,垃圾邮件过滤器似乎工作得非常好。
2021-03-15 11:48:25
@Brad:如果没有必要,根本不要提供您的地址。如果有必要提供您的地址,请准备好接收垃圾邮件。如果不让垃圾邮件机器人轻松地向您发送电子邮件,您就无法让他们轻松地向您发送电子邮件。
2021-03-25 11:48:25
呃,我应该补充一点:垃圾邮件不是一个会吃掉你孩子的恶棍。收到一封奇怪的垃圾邮件并不是世界末日。单击“报告垃圾邮件”并继续。
2021-03-28 11:48:25
@Brad 根据我的经验,情况并非如此。我的域使用 Google 托管的邮件,而且我的电子邮件地址非常容易找到。自从我 14 个月前开始使用它以来,我有 0 个假阴性和 1 个假阳性。我的垃圾邮件文件夹中每天都会收到数百封垃圾邮件。
2021-04-01 11:48:25
无论您的垃圾邮件过滤有多好,都会有漏报(通过的邮件不应该通过)。最终,您必须忍受电子邮件地址,但这种不必要的暴露似乎会增加垃圾邮件通过的复发率。
2021-04-03 11:48:25

当前接受的解决方案是创建一个联系表单,允许用户向您发送电子邮件。如果您从中收到大量垃圾邮件(我没有在我的网站上),那么您可以添加一个验证码以进行良好的衡量,此时您将远离“低垂的果实”。

事实是,如果您提供一个链接,用户可以单击该链接以在“收件人:”字段中使用您的地址弹出打开他们的电子邮件客户端,那么计算机能够从页面上破译电子邮件地址,因此可以垃圾邮件机器人。

当有一个选项可以将消息抄送给您时,我总是喜欢它。联系表格让我烦恼的一件事是它在我自己的电子邮件系统中没有留下任何记录。(尽管抄送任何电子邮件地址的表单可能会产生它自己的一系列问题。)
2021-03-16 11:48:25
你说的很对,但我一直不明白为什么。至多,你是一个在Web表单点击即可,就像你会在最低与电子邮件客户端。唯一增加难度的是可选的验证码。如果用户无法通过它与您联系,那么他们的信息重要吗?
2021-03-20 11:48:25
也没有迹象表明电子邮件表单确实有效。我见过太多被默默地打破的。至少,真正的电子邮件会反弹。
2021-03-25 11:48:25
也就是说,发送电子邮件的逻辑应该写在隐藏的服务器端代码中,这样地址就不会公开。
2021-03-25 11:48:25
虽然这是一个很好的解决方案,但从技术上讲,它是一个让许多用户反感的解决方案。只是在说'。
2021-04-06 11:48:25

您提到这是用于您的个人网站。在我的个人网站(例如 bobsomers.com)上,我只有一段这样说:

在新网站上线之前与我联系的最佳方式是给我发送电子邮件。我的电子邮件地址是我在本网站上的名字。如果你不能从那个提示中弄清楚,那么,你可能会发现电子邮件比找出我的地址更具挑战性。

人们似乎能够很好地解决这个问题,因为我一直收到合法的电子邮件。有时最好的解决方案不需要编写任何代码。:)

这个方法也过滤掉智商低于一定水平的人:D
2021-03-25 11:48:25

混淆href锚点的轻量级方法是对它进行 base64 编码:

> btoa('mailto:email@example.com')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

然后将其硬编码:

<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>

或动态服务器端,例如在 PHP 中:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')">E-Mail</a>

与字符串还原相结合,它可能是非常垃圾邮件保存:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("email@example.com") ?></a>