如何从现代JS启用的机器人保护网站上的电子邮件地址?

时间:2015-03-05 14:30:52

标签: email bots data-protection

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

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

动画示例代码: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的机器人不能吗?

3 个答案:

答案 0 :(得分:7)

这是我个人最喜欢的方法,我发现它到目前为止工作,它不是防弹,理论上可以解析CSS3并且预先形成文本搜索的机器人仍然可以找到它或者是一个spambot为了收获电子邮件地址而触发的事件必须将页面送入基本上无头的浏览器,以某种方式确定什么可能是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>

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

答案 1 :(得分:2)

将电子邮件地址放在一个单独的页面上,只有通过解决CAPTCHA才能到达。

当然,安全性与CAPTCHA的安全性一样好。

如果您只想拥有有限数量的地址,那么使用您自己的混淆可能是一个严肃的选择。我过去曾使用过的一些想法;

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

这里真正的牛肉并不是这些解决方案的绝佳亮点,但我希望不同的方法可以激发你思考新的方向。最后,如果您想出自己独特的解决方案,您将始终更安全;任何类似“新的事实上的标准”的东西都将是刮刀花时间尝试采摘的最低成果。

顺便说一句,我试图考虑残疾人的可用性,所以我实际上将音频版本作为后备用于那些与其他两个人交互问题的人,这些人基于视觉布局。

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

答案 2 :(得分:1)

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

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

例如,如果您只是希望访问者能够与您联系,那么您可以添加&#34;与我们联系&#34;形成如下:https://store.theonion.com/t-contact.aspx

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