如何保护网站上的电子邮件地址免受现代支持 JS 的机器人的攻击?

Posted

技术标签:

【中文标题】如何保护网站上的电子邮件地址免受现代支持 JS 的机器人的攻击?【英文标题】:How to protect e-mail addresses on a website from modern day JS-enabled bots? 【发布时间】:2015-05-06 23:08:03 【问题描述】:

这是网站上反复出现的问题,但在浏览旧问题 20 分钟后,我无法找到现代解决方案。

我以前使用过这种基于 JS 的方法来保护地址。在使用 JS 方法之前,我使用的是基于图像和 Flash 的解决方案。下面是我的旧方法。

动画示例代码笔:http://codepen.io/anon/pen/kIjKe/

html

<span class="reverse eml">moc.niamod@tset</span><br>

CSS:

.reverse 
  unicode-bidi: bidi-override;
  direction: rtl;


.eml 
  display: inline;

JS:

function reverseEmails() 
  if (jQuery(".eml.reverse").length > 0) 
    jQuery(".eml.reverse").each(function() 
      var that  = jQuery(this);
      var email = that.text().split("").reverse().join("");
      that.removeClass("reverse");
      that.html("<a href='mailto:" + email + "'>" + email + "</a>");
    );
  

现在这些方法似乎都不起作用,因为基于 Node.js 的抓取工具能够生成它们正在抓取的页面的图像,然后从所述图像中读取任何人类可读的数据 - 你可以猜到其余的。

现在有什么方法有效,用户仍然可以轻松阅读/单击/复制粘贴电子邮件地址,但支持 JS 的机器人却不能?

【问题讨论】:

恕我直言,您根本不应该再为此烦恼……只需使用一个好的垃圾邮件过滤器。无论如何,您都会收到垃圾邮件,即使是未在网络上发布的地址。 接受垃圾邮件是不可避免的只是错误。我不能声称我拥有 100% 无垃圾邮件的地址,但我已设法将其降低到我仍然可以针对我收到的每一个发送滥用投诉的水平。 我的电子邮件已经使用了 10 多年,但我仍然收到少量垃圾邮件。如果你不粗心,这是可行的:) 【参考方案1】:

我怀疑你的直觉是正确的,如果页面上显示了电子邮件地址,那么机器人可以抓取它。

最好的办法是以某种方式让服务器端参与进来。

例如,如果您只是希望访问者能够联系到您,那么您可以添加一个像这样的“联系我们”表单:https://store.theonion.com/t-contact.aspx

如果您希望访问者能够相互联系,那么您可能需要构建一个像 Craigslist 使用的匿名系统。

【讨论】:

【参考方案2】:

将电子邮件地址放在一个单独的页面上,该页面只能通过验证验证码访问。

当然,安全性与验证码的安全性一样好。

如果您想要保护的地址数量有限,则使用您自己的混淆可能是一个不错的选择。我过去使用过的一些想法;

填字游戏。让它变得非常简单,比如缺少一个单词的著名歌曲标题(易于谷歌搜索,并且没有关于可能的第二解释的争论)。您可以填写许多字母,以使其更容易。 带有背景噪音的录音。我不想使用自己的声音,所以我使用了带有德国口音的语音合成器(-:AT&T 网络演示 IIRC)并在几秒钟的背景音乐中混合(Frank Zappa 的 Peaches en regalia 对我来说效果很好,但口味不同)。 手绘图像。我喜欢绘制字母轮廓,但我怀疑它们是否足够规则以通过任何 OCR。

真正的亮点不是这些解决方案的出色表现,而是我希望能够激发您思考新方向的不同方法。最后,如果您想出自己独特的解决方案,您将永远更安全;任何类似于“新的事实标准”的东西都将是爬虫们花时间试图采摘的最容易实现的果实。

顺便说一句,我试图考虑残障人士的可用性,因此我实际上将音频版本部署为与其他两个基于视觉布局的交互有问题的人的后备方案。

顺便说一句,这些天很少有人愿意给我发电子邮件(或者他们可能愿意,但最终被视为垃圾邮件被拒绝?)坦率地说,这是一种解脱。那些通常使用我的域名的 whois 注册信息(使用 whois 注册商提供的匿名地址)或者是很好的猜测者。

【讨论】:

猜猜我会使用点击激活模式对话验证码,如果您成功,则将电子邮件地址放在页面上。【参考方案3】:

这是我个人最喜欢的方法,到目前为止我发现它有效,它不是防弹的,理论上可以解析 CSS3 并执行文本搜索的机器人仍然可以找到它,或者按顺序触发事件的垃圾邮件机器人要收集电子邮件地址,必须将页面输入基本上是无头浏览器,以某种方式确定可能是 JS 混淆的电子邮件内容这些场景是大量的工作,可能没有任何好处,而且没有垃圾邮件发送者会考虑这样做,事实是我迄今为止没有垃圾邮件,它非常适合人类阅读或点击:

  <style>
    .email:after content:'@mydomain.com'; 
    </style>
    Contact me at:<div class="email">myemail</div>
    <script>
$('.email').click(function()
window.location.href='mailto:'+$(this).html()+'@mydomain.com';
);
</script>

问题是电子邮件不是一个链接,所以机器人永远不会触发点击事件,因为他们甚至不知道它会做任何事情。

【讨论】:

感谢您的提示,看起来非常可靠。

以上是关于如何保护网站上的电子邮件地址免受现代支持 JS 的机器人的攻击?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护企业免受网络钓鱼

如何保护我的论坛免受垃圾邮件的侵害?

保护Exchange OWA免受暴力***

Vue.js:如何保护登录组件免受经过身份验证的用户的影响

如何保护我的 IP 免受欺骗或保护?

如何保护应用程序免受第 3 方 js 库中存在的 XSS 向量的影响?