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

Email 如何保护网站上的电子邮件地址不受现代支持JS的机器人程序的攻击?,email,bots,data-protection,Email,Bots,Data Protection,这是一个在网站上反复出现的问题,但在花了20分钟浏览旧问题后,我无法找到现代的解决方案 我以前使用过这种基于JS的方法来保护地址。在使用JS方法之前,我使用的是基于图像和flash的解决方案。下面是我的老办法 动画示例代码笔: HTML: JS: 函数reverseEmails(){ if(jQuery(“.eml.reverse”).length>0){ jQuery(“.eml.reverse”).each(函数(){ var=jQuery(this); var email=that.tex

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

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

动画示例代码笔:

HTML:

JS:

函数reverseEmails(){
if(jQuery(“.eml.reverse”).length>0){
jQuery(“.eml.reverse”).each(函数(){
var=jQuery(this);
var email=that.text().split(“”).reverse().join(“”);
删除类(“反向”);
html(“”);
});
}
}
如今,这些方法似乎都不起作用,因为基于Node.js的刮板程序能够生成他们正在刮板的页面的图像,然后从所述图像中读取任何人类可读的数据——您可以猜到其余的


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

我怀疑你的直觉是正确的,如果页面上显示了电子邮件地址,那么机器人就可以将其删除

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

例如,如果您只希望访客能够联系到您,则可以添加如下“联系我们”表单:


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

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

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

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

  • 纵横字谜。让它变得非常简单,有一些线索,比如缺少一个单词的著名歌曲标题(谷歌很容易找到,而且没有关于可能的第二种解释的争论)。你可以填写许多字母,使它更容易
  • 有背景噪音的录音。我不想使用自己的声音,所以我使用了一个带有德国口音的语音合成器(:AT&t web demo IIRC),并在几秒钟的背景音乐中进行了混合(弗兰克·扎帕(Frank Zappa)的《华丽的桃子》(Peaches en regalia)对我来说效果很好,但口味不同)
  • 手绘图像。我喜欢画字母轮廓,但我怀疑它们是否足够规则,可以通过任何OCR
这里真正重要的不是这些解决方案的卓越之处,而是我希望能够激励你朝着新方向思考的不同方法。最后,如果你能想出自己独特的解决方案,你将永远更安全;任何类似于“新的事实标准”的东西都将是刮削者花时间试图采摘的挂得最低的果实

顺便说一句,我试着考虑残疾人的可用性,所以我实际上部署了音频版本作为与其他两个版本交互有问题的人的备用方案,这两个版本基于视觉布局


顺便说一句,现在很少有人想给我发电子邮件(或者他们真的发了,但最后被当作垃圾邮件拒绝了?),这让我松了一口气。那些通常使用whois注册信息作为我的域名(使用whois注册者提供的匿名地址)的人,或者是很好的猜测者。

这是我个人最喜欢的方法,我发现到目前为止这种方法是有效的,它不是防弹的,理论上,一个能够解析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>

.email:在{content:'@mydomain.com';}之后
联系我:myemail
$('.email')。单击(函数(){
window.location.href='mailto:'+$(this.html()+'@mydomain.com';
});

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

IMHO你不应该再为此烦恼了……只要使用一个好的垃圾邮件过滤器就行了。不管怎样,你都会收到垃圾邮件,即使是在没有在网上发布的地址上。接受垃圾邮件是不可避免的是错误的。我不能说我有100%的无垃圾邮件地址,但我已经设法将其降低到我仍然可以对我收到的每一个地址发送滥用投诉的水平。我的电子邮件已经超过10年了,我仍然只收到一分钟的垃圾邮件。如果你不粗心的话,这是可行的:)我想我会点击激活模式对话验证码,如果你成功的话,它会将电子邮件地址放在页面上。谢谢你的提示,看起来很不错。
.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

.eml {
  display: inline;
}
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>");
    });
  }
}
  <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>