阻止直接POST的垃圾评论
上一篇我讲了如何利用隐藏输入框来组织垃圾评论,今天登陆后台,居然还是发现了一篇垃圾评论~
这是怎么回事?莫非是我的隐藏输入框不起作用了?不应该啊~本地测试都是没问题的。人肉Spam?更加不可能了,哪个foreigner会找到这个没什么人气小站来投放ad啊…
一时半会想不出原因,遂搁置一边,去cPanel转转。在看Last Visitor的时候,忽然发现了如下数据:(因为这件事出现在大约3天之前,Last Visitors的数据已经刷新,下面的截图是Raw Access Log中的数据)
对比一下IP,跟spam的一模一样!可以看到,这个Robot先访问到了主页面,之后随机挑选了一篇日志,获得相关数据后直接POST,第三行POST返回代码是302,这是wp-comments-post.php返回的Location,最后它验证了一下,开闪。原来SpamRobot是直接使用POST方法向wp-comments-post.php提交数据的。这帮家伙!
知道了原因,接下来就要想想如何来防止了。如果你是按照上篇的说明修改了自己的主题的话,恭喜你!解决的办法很简单。只要在主题的function.php中加入如下代码就OK啦!
1 2 3 4 5 6 7 | function spam_check($comment) { session_start();//开启session if(empty($_SESSION['SS_1_ID'])){die("Spam Comment!");}//不存在session值,垃圾评论,结束后续操作 return $comment;//否则返回评论数据,继续后续步骤 } add_filter('preprocess_comment', 'spam_check', 1); |
如果你使用了Akismet插件,建议修改一下插件代码。以2.2.6版本为例,修改第500行:
add_action('preprocess_comment', 'akismet_auto_check_comment', 1);
把其中的”1″改大一点,比如”5″。这样可以防止产生”潜在”的冲突(我尝试过不修改,似乎也工作正常,但我不能保证)。
主要的思想就是利用session。还记得我在上一篇中的三个随机生成的Session值吗?在处理评论的时候,相关函数会对session进行验证。这里我们可以直接检查是否存在之前生成的随机session值(我这里用的是”SS_1_ID”)。一般的SpamRobot都是直接发送数据,不会保存Cookie。这样在对应于SpamRobot的session中就不存在”SS_1_ID”。
如果你没有使用我的方法改造自己的主题,这里也有个大概的解决办法。前提还是使用session。将commenter的name后拼上某个session值,再到函数中去验证。这个办法我没有尝试,从理论上将应该是没什么问题的。尝试自己解决问题,你会发现很多的乐趣!
当然,如果某个高级的SpamRobot能保存Cookie,这个方法就失效了。怎么办呢?别忘了,咱还有Akismet啊~
AD是无处不在的…..但是我的博客用自带的插件就没什么问题了
@吖Bee
好吧,其实我是在折腾…
我感觉一个Akismet不用改就很棒了 哈哈呵呵
@西风
嗯,我现在的想法就是对于一看就知道是垃圾评论的直接处理掉,不确定的再交给akismet。
试试这次可以评论上么?
我的博客现在好多人肉的
@西门吹水
哎~人肉的话就只能靠Akismet和Blacklist了。
载入效果好帅!
暂时没这方面需要,偶尔碰上个十几条spam,删也不费事。
@Epile
呵呵~主要是看大家都是把进度条放在左上角,我就想着换一下样子~
垃圾评论 很恼人。有一次,一个家伙 一天耗掉我 几百M的流量。。
@小奥
这种家伙直接封IP或者加到黑名单~~
有可能把不是垃圾评论的评论给删了!
@卢松松
嗯,有可能会把Pingback/trackback阻止。研究代码ing~~
突然发现博客的文章列表只有一页~囧~
N久不更新了,鄙视你……
@Showfom
实在是心有余而力不足哇~~~sigh~
恩,广告这种东西,总是上有政策下有对策
都是利益惹的祸……..
换地址了换地址了
赶紧把我的链接换一下哦
为了PR,我RP要爆发了
恭喜blog开通,祝贺一下!
我从嘀咕上走来,居然看到这么多熟悉的面孔~
你好久没更新了
@zwwooooo
哎~一来没什么动力,二来确实忙得不行,实在没有时间静下来写东西
俺还是看不懂,习惯用插件
我现在用的是typecho博客程序,用插件过滤掉了6000多条垃圾评论!
国强已经转载并标注了出处 http://www.liguoqiang.com
http://www.liguoqiang.info 不是上边那个.com
Akismet 就已经够了。
好深奥哦!!!!
搞不定,努力学习中…
Akismet还不够用啊~- -!