为了将电子邮件地址放在我的网站上,我使用这个 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 代码确定电子邮件地址。
这种 JavaScript 电子邮件混淆方法到底有多安全?
这并不是真正的“安全”问题 - 普通用户可以看到的任何内容都不“安全”,因为任何真正确定的恶意实体都可以像普通用户一样行事并实际渲染/评估页面。
这更多的是一个威慑的问题——自动收割机关心多少?我没有确切的数字,但我的猜测是,大多数收割机都懒得完全渲染或评估页面,因为它们有很多“更软”的目标,并且需要更长的时间才能完全评估页面的脚本这不太适合快速大规模蜘蛛抓取。
如果你真的想阻止收割者,目前可用的最好的威慑措施可能是使用验证码来检索地址,例如Mailhide。然而,如果收割者有足够的决心(通过诸如有意或无意地众包验证码破解等方法),即使这种情况也可能被挫败。
如果有人想专门针对您的网站,那么安全性为 0%。 如果您只是想提高自动化脚本的标准,那么可能没问题。 我还没跟上最先进的技术。
但是,我想指出的是,您不应该通过 document.write() 将任意字符串(例如用户名和域名)注入到 HTML 中,因为这是一个安全漏洞。 您应该创建一个 A 节点并使用 getter/setter 方法。
如果你要这样做(原则上我不同意,因为我相信没有 JavaScript 的用户应该可以访问所有内容),诀窍就是做一些独特的事情。如果你的方法是独特的,那么爬虫的作者就没有多大意义来编写解决方法,是吗?
但是,已知一些现代抓取工具会使用渲染的源来抓取地址,从而使任何 JavaScript 混淆方法变得毫无价值。
这完全取决于渲染页面的成本是否可以通过电子邮件地址的值来抵消。正如 Dav 所说,专业垃圾邮件发送者可以雇用大量廉价劳动力来呈现此类页面,或破译验证码。在某些情况下,这是非常值得的,例如在受信任的域中创建新的电子邮件帐户。
您可以通过在 showEmailLink() 中执行一些计算来增加渲染页面的成本。
虽然我没有任何确凿的证据,但我相信电子邮件收集器已经有能力执行 JavaScript 代码很多年了。这仅基于使用与您的功能非常相似的功能来“保护”公共页面上未在其他地方使用的电子邮件地址。果然,最终他们开始收到垃圾邮件。
从根本上讲,您可以做的任何不需要人类解释和输入电子邮件地址的事情,最终都会被电子邮件收集器抓取。如果您的浏览器可以执行 javascript 对其进行解码,那么它们也可以。 (他们可能使用浏览器来做到这一点。)
http://www.youtube.com/watch?v=Ce6cLrrfS5E 他说如果你将 JavaScript 放入不允许的地方通过 robots.txt 那么你就不必担心机器人渲染 html,但谷歌在解析 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>
相当好的混淆。