javascript电子邮件混淆真的有多安全吗?

时间:2009-09-06 23:35:52

标签: javascript html obfuscation spam-prevention email-spam

为了在我的网站上放置电子邮件地址,我使用 Javascript

function showEmailLink(user, domain, linkText) {
 if (linkText == "") {
  linkText = user + "@" + domain;
 }
 return document.write("<a href=" + "mail" + "to:" + user + "@" + domain
   + ">" + linkText + "<\/a>");
}

所以在我的 HTML 中,我可以写下这个:

please send me an 
<script type="text/javascript">
  <!--
  showEmailLink("edward","tanguay.info","e-mail");
  //-->
</script>

这可以保护我的网站免受垃圾邮件发送者的攻击,他们通过屏幕抓取源代码收集电子邮件地址,因为我的电子邮件在文本中 no where

然而,我无法想象一个有动力的垃圾邮件发送者无法以某种方式编写一个屏幕保护程序,可以机械地根据此javascript和HTML代码确定电子邮件地址。

这种javascript电子邮件混淆方法真的有多安全吗?

7 个答案:

答案 0 :(得分:14)

这不是一个“安全”的问题 - 普通用户可以看到的任何东西都不是“安全的”,因为任何真正确定的恶意实体都可以像普通用户一样行动并实际渲染/评估页面。

这更像是一个威慑问题 - 自动化收割机关心多少钱?我没有确切的数字,但我的猜测是大多数收割者都不会费心去完全渲染或评估页面,因为它们有很多“更软”的目标,而且完全评估页面的脚本需要更长的时间这不适合快速大规模爬行。

如果你真的想要阻止收割者,那么目前可用的最佳威慑可能是让CAPTCHA检索地址Mailhide。然而,如果收割机得到足够的确定(通过诸如知情或甚至不知情的众包CAPTCHA破坏等方法),即使这样也可能被挫败。

答案 1 :(得分:1)

如果有人想要专门定位您的网站,则这是0%安全的。如果您只是想提高自动脚本的标准,那么您可能没问题。我没有跟上最先进的技术。

但是,我想指出,您不应该通过document.write()将任意字符串(例如用户名和域名)注入HTML,因为这是一个安全漏洞。您应该创建一个A节点并使用getter / setter方法。

答案 2 :(得分:1)

如果你要这样做(我原则上不同意,因为我相信没有JavaScript的用户可以访问所有内容),诀窍将是做一些独特的事情。如果你的方法是独一无二的,那么刮刀的作者编写一个解决方法并不是很重要,是吗?

然而,已知一些现代刮刀使用渲染源来刮取地址,使得任何JavaScript混淆方法都毫无价值。

答案 3 :(得分:1)

这完全取决于呈现页面的成本是否被电子邮件地址的值抵消。正如戴维所说,专业的垃圾邮件发送者可以雇佣一大批廉价劳动力来渲染这些页面,或者破译CAPTCHAS。在某些情况下,这非常值得,例如在受信任的域中创建新的电子邮件帐户。

您可以通过在showEmailLink()中执行一些计算来增加呈现页面的成本。

答案 4 :(得分:1)

虽然我没有任何确凿的证据,但我相信电子邮件收集者已经有能力执行javascript代码已有几年了。这仅基于使用与您非常相似的功能来“保护”公共页面上未在其他任何地方使用的电子邮件地址。果然,最终他们开始收到垃圾邮件。

从根本上说,你可以做的任何事情都不需要人来解释和输入电子邮件地址, 最终会被电子邮件收集者抓取。如果您的浏览器可以执行javascript来解码它,那么它们也可以。 (他们可能会使用浏览器来完成它。)

答案 5 :(得分:1)

在网站管理员视频中提到这种技术不再“安全”的亚光切片在这里看到链接http://www.youtube.com/watch?v=Ce6cLrrfS5E他说如果你把JavaScript放到robots.txt不允许的地方那么你就不用担心了关于机器人渲染HTML,但谷歌在解析JavaScript方面做得越来越好,如果你使用这种方法,你的地址可以用明文搜索

答案 6 :(得分:0)

如果你像我一样并且不介意使用javascript,我找到了这个页面: http://reliableanswers.com/js/mailme.asp 它基本上使用这个片段:

<script type="text/javascript">
function mailMe(sDom, sUser)
{
  return("mail"+"to:"+sUser+"@"+sDom.replace(/%23/g,"."));
}
</script>
<a href="/contact/" title="Contact Me!"
 onmouseover="javascript:this.href=mailMe('example%23com','me');"
 onfocus="javascript:this.href=mailMe('example%23com','me');">Contact
Me!</a>

相当好的混淆。