多管齐下对付垃圾留言
“Spam”是个令人讨厌而头疼的东西。如今的Spam早已蔓延到电子邮件以外的广阔领地,比如留言本、论坛、Blog甚至Wiki等。为了对付这种乱丢垃圾的行为,人们使用了各种手段,如封锁IP、阻挡客户端、使用验证码等等。封锁IP的方法估计是效果最差的了,因为中国人大多使用动态分配的IP(没法子,等着IPv6吧,哈哈),重新联网后往往已经换了个IP。如果阻止IP段,打击面似乎又太大。阻挡客户端的方法,是通过判断UserAgent是否为真实的浏览器的,来达到阻止BOT(机器人)的目的,比较有效,但BOT也在推陈出新,且程序的UserAgent似乎并非不可更改,而且此法对人工Spammer毫无办法。至于验证码,可以有效对付BOT,却同样对人工Spammer没有办法,因为人家不会介意多输入几个字符的。除此之外,还有一种方法就是阻挡字符,任何包含特定字符的发言将无法发表,这是我目前使用的主要方法,我的感觉是,此法虽有不足之处,但效果明显。
前三个方法,都是针对Spam过程的,都是防止提交动作的实现。而最后一种是针对Spam内容的,是在提交动作实现后,通过判断提交的内容,以决定内容是否合法。
阻挡特定字符的功能,其实没什么技术含量,以ASP为例,概述如下:
首先要有一个被阻挡字符的列表,可以加入数据库里,用表单能随时添加新的字符。如图,每个字符占一行:

然后,需要一小段代码以实现阻挡功能,当然了,代码要放在将数据添加到数据库之前。假定badwords是包含所有被阻挡字符的变量,usercontent是从表单提交过来的留言内容:
这种方法的好处就是,它考虑的是根本性的问题(内容),不管你过程怎么来的,只要内容不符,通通歇着,如果构造的阻挡字符足够合理,完全可以将大部分垃圾拒之门外。当然了,阻挡字符的方法也有不足,比如,某些字符对这个站点来讲是垃圾字符,而对于另外一个站点却完全可能是个正常字符,因此所阻挡的字符不具备通用性。还有,你也不可能将所有垃圾字符都加入到列表中,特别是那种内容只有一个网址的,只好发现一个阻挡一个了。当然了,总的来说这不失为一种有效的方法。此法应用于我的旋木留言本,效果明显,垃圾留言减少了80%左右。这是我正在用的被阻挡字符的列表。
也许任何单一的方法,其效果都难以让人满意,所以不妨多管齐下。要是上述四种方法都用上的话,虽然站长们也辛苦点,不过恐怕Spammer们要辛苦得多了,呵呵。
恭喜,您的发言被阻挡了
哈哈,不过构思不错
推荐一个简单屏蔽垃圾留言的小技巧
http://lxp.xbnu.org/detailpage/detailpage.asp?pagetype=study&ID=773