飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

如何防止网站垃圾留言评论的肆略

Author:Flymorn Source:飘易博客
Categories:Asp编程 PostTime:2008-2-27 11:42:46
正 文:
    可能很多自称是SEO高手的“专家”们都有一个同样的“法宝”,那就是疯狂地在其他网站上留下大量的垃圾留言,垃圾评论,以便留下他们的链接。或许这在很久以前可能有用,随着SE的反SPAM的技术不断的升级,现在再这样做简直是自找死路,无疑是给SE一个惩罚你的理由。

    然而,这些高手们依然不知疲倦乐在其中,或机器自动留言,或人肉留言,总之,只要是可以留下一个链接的地方都留下了他们坚强的身影,他们才不管你的网站是什么类型的,走过路过都要进去评论一下。鉴于垃圾猛于虎的严峻形势,飘易博客甚至不得不将评论设置为需要审核才能显示。

    当然,我们也不是完全反对留言评论,WEB2.0需要网站和用户的互动,但要留言至少也要看下别人的文章,有感而发嘛,这是非常正常的交流沟通方式,我们非常欢迎这样的留言和评论。

    当然,我们需要反击,针对机器每秒几十几百的信息发布量,我们也要从技术手段上屏蔽它们。如何具体操作呢?flymorn提供几个可行有效的方法。

    1、判断该发布信息是否有可靠的来路。只要是自然人发布的,那么他一定是通过我们提供给用户的提交页过来的,一定有一个来路;如果是机器发布的,就不会有来路信息。

'判断来路,禁止外部提交
dim server_v1,server_v2
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if server_v1="" or instr(server_v1,"/add.asp")<=0 or mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<SCRIPT language=JavaScript>alert('来源非法,禁止外部提交!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if

    注意,上面的/add.asp就是提交页面来源页。当然,机器也可以伪造来路,这就要结合以下方式一起对付了。

    2、验证码。验证码一直是对付机器垃圾留言的一个可行的方法。不同的验证码有不同的对付机器留言的能力,越复杂的验证码,机器越难破解。这需要在考虑用户的感受和对付机器之间选择一个平衡点。关于验证码的使用方法,我就不多说了,谷歌、百度里搜索下就会出现很多介绍。

    3、判断来源提交的时间。如果在提交页停留的时间太短,比如20秒,一般只要是个人,他打字的时间都不必这个少。举例说明,在用户打开页面(如add.asp)的时候,我们记下这个时间,在form提交表单里增加一个隐藏对象,如:
<input name="intime1" type="hidden" value="<%=Now()%>">

    然后,当用户写好留言评论后提交到具体处理页面(如addok.asp)的时候,我们获取当前时间,和add.asp里的这个intime1时间比较,如果这个时间差小于设定的时间,如20秒,则禁止留言,判断为机器。代码可这样写:
If DateDiff("s",request.form("intime1"), Now()) < 20 then
response.write "<SCRIPT language=JavaScript>alert('您的留言速度太快了吧,禁止留言!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if

    通过以上三种方法可以屏蔽掉绝大部分的机器垃圾留言评论,如果还有大量的留言的话,那多半是人肉留言了。但是,我们又如何对付人肉留言呢?flymorn也提供方法对付。

    方法很简单,就是通过记录用户的cookies以及IP来限制同一用户发表留言的数量。比如一天24小时内,只允许同一用户发表信息5条。我们可以通过以下方法实现。

<%'当用户每提交一次
if request.cookies("postnum")="" then
response.cookies("postnum")=1
response.cookies("postnum").expires=DateAdd("h", 24, Now()) 
else
response.cookies("postnum")=request.cookies("postnum")+1
end if
if request.cookies("postnum") > 5 then
response.write "<SCRIPT language=JavaScript>alert('今天留言次数超过限制,禁止留言!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if 
%>

    通过以上的限制,人工发帖也得到了一定的限制。上面的方法是基于cookies判断,当然用户可以通过浏览器清空COOKIES,但这样增加了他们发垃圾帖子的难度,提高了门槛。我们还可以继续判断发布者的IP,通过同一个IP下发帖限制数量来达到我们的目的。在此,就不再扩展,大家可以自己设计如何判断IP来限制发帖的方法。如果您对本文讨论的主题有看法或建议,欢迎留下评论,以便我们一起探讨。
作者:Flymorn
来源:飘易博客
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Google PR:昨晚再次更新了
下一篇:Yaris雅力士车身彩绘,彰显时尚智慧
8条评论 “如何防止网站垃圾留言评论的肆略”
2008-2-27 13:42:53
我只是一直不停地去定义SPAM,杀不完的这些。
2008-2-27 13:56:03
头像搞定了,哈哈.
2008-2-27 22:48:11
呵呵
我这个算不算是垃圾评论呢?
2008-6-19 1:56:20
一头雾水,我还是采用了手工审核的方式。
5 sachin
2008-12-25 14:32:10
不错的总结
2009-12-16 11:09:35
第一种的方法不太会使用,具体要放在哪个页面的哪部分?请博主指教。
2010-4-15 12:36:07
哈~其实验证码是防御垃圾留言最有效的方法...
不过个人不喜欢~
个人发觉有一种方法还不错~可以结合下使用

将提交按钮设置为字段~如<span onclick="submit();">submit</span>~使用JS提交~
8 Flymorn
2010-4-16 8:53:58
7 切腹黑兔:
机器提交是不用点按钮的,直接POST数据到后台的。
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有 渝ICP备07006361号