手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

如何混淆电子邮件来防止垃圾发送者

首页 > Javascript >

这是一篇来自cssrain站长的译文。很多时候,我们都不敢在自己的勃客、网站上留下自己的mail,因为 这会带来大量的垃圾邮件。
但如果不留mail,又会让很多用户、过客无法与自己联络,这真是一个两难的问题。在几年前就有那种把email改成用document.write输出的情况。但这种并不实用。

看完这篇文章,或者你应该有相对较好的方法来处理你的邮件,不过我个人推荐的是这种;

XML/HTML代码
  1. <!--这是一个简单的例子,可能并不能运行,我是直接手工输入的,没有debug,只是介绍原理-->  
  2. <a href="#" onclick="sendmail()" id='sendmail'>gou<span class="bgcolor">0982134</span>ki@<span class="bgcolor">0912ujf</span>neatdns.com</a>  
  3. <script>  
  4. function sendmail(){  
  5.     $('#sendmail span').remove();  
  6.     //然后反$('#sendmail').text() 拷贝到剪贴板,给用户提示一下  
  7. }  
  8. </script>  

改写了一下,终于可以走通了,不会用clone,只能用这种替代方案了。。代码较差:

XML/HTML代码
  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>  
  2. <style>  
  3. #sendmail span{display:none}  
  4. #hiddenmail {display:none}  
  5. </style>  
  6. <a href="#" id='sendmail'>gou<span>0982134</span>ki@<span>0912ujf</span>neat<span>091r</span>dns.com</a><span id="hiddenmail"</span>  
  7. <script>  
  8. $(document).ready(function(){  
  9.     $('#hiddenmail').html( $("#sendmail").html());  
  10.     $("#hiddenmail span").remove();  
  11.     $('#sendmail').attr("href" ,"mailto:"+$("#hiddenmail").text());  
  12. });  
  13. </script>  
这种情况,邮件地址可以正常显示,但如果从网页上选择邮件地址再复制的话,就会把span所包含的内容也复制进去了。个人觉得这样处理比较好,对于span里的内容,可以通过程序生成插进去。位置也可以不一样,这样别人就无法直接复制网址了。而且点击后也能够发送邮件。但问题同样明显,如果禁用了javascript,那就会出现一堆无效字符

 

以下是66[cssrain站长]翻译的文章内容:

一直以来我都认为” mailto: “是一个神圣的链接。通过它,我可以在网页中发布我的email地址,并且任何人都可以通过单击这个链接联系我。当然前提是在一个纯洁的Web环境下 ---在垃圾邮件发送者出来之前。举个例子说:今天你在你的网页中使用了” mailto: “,那么30秒后你将收到第一封伟哥信息。垃圾邮件发送者的速度之快另你惊讶。从今以后,你将收到越来越多的垃圾邮件。那么我们有什么办法,在自己的网页 中发布自己邮箱的同时,不引起垃圾邮件发布者的注意呢?

最明显的解决办法是在你的HTML中使用机器不可读的Email。比如:“bob (at) bobsdomain dot com”。虽然这可以使垃圾邮件发送者不再那么容易,但它同时也会为难您的用户。

另一种选择是使用JavaScript生成的电子邮件地址 ,然后对字符串加点编码。如:

<p>contact :
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>

 

这将阻止大多数垃圾邮件发送者,但如果用户禁用JavaScript将不会看到您的地址。
(我不推荐使用 document.write() )

一个更好的解决办法是使用它们两者相结合的技术,以阻止垃圾邮件,同时不会造成用户的困难。

首先在我的网页中使用一个人性化的,同时垃圾邮件发送者不能收集的email地址。我们还将它链

接到一个联络网页,例如:

< p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p> 

请注意,我们为链接添加了一个class,并设置为”email”

接下来写一个JavaScript函数搜寻网页的伪装的电子邮件,并将它转换成真正的mailto:链接。

我们将创建一个' email.js '文件,将它包括在我们的HTML
< script type="text/javascript" src="email.js"></script>

 

所需要的代码很短,代码如下:
function EmailUnobsfuscate() {
 //查找所有的a
 var link = document.getElementsByTagName && document.getElementsByTagName("a");
 var email, e;
 for (e = 0; link && e < link.length; e++) {
  // 判断当前link的class是否含有"email"
  if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
   // 获取全小写的email地址
   email = link[e].firstChild.nodeValue.toLowerCase() || "";
   // 转换email地址
   //将dot转为.
   email = email.replace(/dot/ig, ".");
   //将(at)转为@
   email = email.replace(/\(at\)/ig, "@");
   //将空格转为"" 
   email = email.replace(/\s/g, "");
   //判断是否为有效email
   if (/^[^@]+@[a-z0-9]+([_\.\-]{0,1}[a-z0-9]+)*([\.]{1}[a-z0-9]+)+$/.test(email)) {
    // 把真正的email插入到页面中
    link[e].href = "mailto:" + email;
    link[e].firstChild.nodeValue = email;
   }
  }
 }
}

 最后,我们需要确保在网页加载完毕后运行email.js

window.onload = EmailUnobsfuscate;

使用两者结合的结果是:

1、我们的原始HTML网页中没有mailto:链接,同时也不会轻易收到垃圾邮件发送者发来的垃圾邮件。

2、绝大多数的用户(那些启用JavaScript )将看到一个标准的电子邮件地址和mailto:链接。

3、少部分禁用脚本的用户可以看到bob (at) bobsdomain dot com的地址。

说了这么多,意图就是展示这些概念,而不是这些代码。尽管例子能正常工作,但我还是建议你:

1、使用您自己的伪装电子邮件格式,例如:bob {@} bobsdomain – dot - com

     因为垃圾邮件发送者可以阅读这篇文章后变换编码的电子邮件,然后轻易的对付你!

2、使用不同的链接标识符--- “email”有点明显!

3、使用JavaScript库,例如jQuery ,使代码更为简短。您还应该确保它应付空格或其他DOM
点周围的电子邮件地址文字(不处理的代码段)。

4、使用一个更强大的事件处理程序来取代window.onload

 

 

祝您好运。


例子演示: http://www.cssrain.cn/demo/howtoemail.html

原文地址: http://www.sitepoint.com/blogs/2009/05/05/stop-spam-harvesting-email-obfuscation/




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: 混淆

« 上一篇 | 下一篇 »

只显示10条记录相关文章

中国人最易误读的10个姓氏 (浏览: 22786, 评论: 0)

1条记录访客评论

果然很强大
以前用的太简单了

Post by longines on 2009, June 3, 9:03 AM 引用此文发表评论 #1


发表评论

评论内容 (必填):