收到epile的留言,顺着留下的链接找到了花儿开了这篇文章,写的是一个关于如果防止spam的新思路,感觉还挺有道理,但是经过思考之后比较怀疑这样的方式是否可行,可能仅仅是一个治标不治本的方法,并且用了庞大的jquery会拖慢整个站点的速度。所以我这里也写了一个反spam的新思路,供大家参考。其实是一个简单的思路,基本思想就是将你的留言处理方式特殊化。
我没有写过真正的spam程序,但是在大学的时候曾经用简单的方法绕过chinaren校友录的javascript验证,成功的进行“多彩”留言(现在不行了)。从这点看来,想绕过客户端的限制是一件比较容易的事情,所以ajax防止spam的方式仅仅只能针对人工spam。不能防止程序自动spam,除非我们假设这个spam程序会这样做:1.打开你的页面;2.找到填写留言和名字的表单域(ajax防止spam的方式就是想在这里将spam卡住);3.填写好用户和广告评论;4.模拟用户提交评论表单。如果spam程序真是这样,那么恭喜你,在客户端可以很容易的控制住spam。但是大部分spam不可能会这样做。因为对于主流的程序,如wordpress、drupal,或者主流的bsp,spam程序早已清楚留言的表单有多少域,这些域的含义代表什么,并且也知道对于表单域赋予不同的值便能对不同的文章进行评论。所以spam程序不需要打开你的页面,它完全可以自行制造一个表单(因为你有什么域它都一清二楚了),然后伪造http头信息,假装是从web发送数据,直接将数据post到处理评论的程序,所以前面客户端用ajax做的一切努力都白费了。
因此,目前最有效能防止机器spam的还是图形验证码,当然那些可以通过路径都能看出来的验证码是没有用的。
既然spam程序在知道表单域的情况下可以轻而易举的绕过客户端限制,那么如果你将表单进行个性化,spam的程序便没有办法了,因为他不可能专门为你的表单而去写一个spam程序,这样还不如人工spam。所以这个简单的反spam思路便出现了:在你的评论表单中添加一个独一无二的自定义域,然后在处理留言的程序中判断这个域是否存在,不存在,则留言不成功,这样针对同类程序的spam程序便宣告失败。至于定制域的出现可以采用ajax动态载入,这样可以防止spam程序通过网页恶意留言。
目前我感觉此方案可行,因为很多朋友那千年不便的验证码便能成功堵住spam,对于wordpress可以考虑写成插件。
总之,不要对客户端防spam抱有太大的希望。
标签:PHP, Wordpress
前5排已经被占据了 快抢好位置哦
添加一个“自定义域”和“图形验证码”有什么区别呢?
你说的加那个域的方法我已经试过了, 刚开始是有效的, 但不超过1个小时就恢复原样了
我本来也是想加一个随机域的, 不过我怕到时候不知名的错误导致正常的留言也不能留, 就加了一个固定域, 结果还是没能spam掉. 我感觉加随机域应该也不行. 因为刚开始能够spam表明垃圾评论程序没能及时调整方向, 可在一段时间之后就突然可以了, 我估计是分析网页结构了. 所以在能够分析网页结构的情况下, 我感觉任何spam是没有意义的. 所有的spam只能放在程序无法探测的部分, 也就是后台服务器程序中, 验证码就好在这里呀. 除非他进行ocr识别, 那样的成本也太高了
你的ajax评论时用什么来实现的? 感觉很智能化啊, 能够自动增加楼层
加你G也没反应。你用的回复插件是哪一个?