7

为了将电子邮件地址放在我的网站上,我使用了这个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>

这可以保护我的网站免受垃圾邮件发送者的侵害,这些垃圾邮件发送者通过截屏源代码来收集电子邮件地址,因为我的电子邮件不在文本中的任何位置。

但是,我无法想象一个有动机的垃圾邮件发送者不能以某种方式编写一个可以根据这个 javascript 和 HTML 代码机械地确定电子邮件地址的screenscaper。

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

4

7 回答 7

14

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

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

如果您真的想阻止收割机,那么目前可用的最佳威慑可能是涉及 CAPTCHA 来检索Mailhide之类的地址。然而,如果收割机足够确定(通过诸如故意或什至不知情的众包验证码破解等方法),即使这也可以被挫败。

于 2009-09-06T23:39:02.713 回答
1

如果有人想专门针对您的网站,这是 0% 安全的。如果您只是想提高针对自动化脚本的标准,那么您可能会没事。我没有跟上最先进的技术。

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

于 2009-09-06T23:40:48.360 回答
1

如果您要这样做(原则上我不同意,因为我认为所有内容都应该可供没有 JavaScript 的用户访问),诀窍就是做一些独特的事情。如果您的方法是独一无二的,那么爬虫的作者编写解决方法没有多大意义,是吗?

然而,众所周知,一些现代抓取工具会使用渲染的源代码来抓取地址,从而使任何 JavaScript 混淆方法变得毫无价值。

于 2009-09-06T23:41:44.560 回答
1

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

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

于 2009-09-06T23:42:51.797 回答
1

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

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

于 2009-09-06T23:46:12.337 回答
1

matt cutts 只是在网站管理员视频中提到,这种技术不再“安全”,请参阅此处的链接http://www.youtube.com/watch?v=Ce6cLrrfS5E他说,如果您将 JavaScript 放入机器人不允许的地方。 txt 那么你就不必担心机器人渲染 html 但谷歌在解析 JavaScript 方面做得越来越好,如果你使用这种方法,你的地址可能会以明文形式搜索

于 2009-10-28T15:43:40.453 回答
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>

相当不错的混淆视听。

于 2009-09-23T12:55:46.830 回答