TypeCodes

wordpress关键词黑名单:反垃圾评论再升级(非插件)

1 老话题:wordpress垃圾评论

wordpress垃圾评论由来已久,在各位博主的有力反抗下,垃圾评论完成了一次又一次的升级。对wp新手来说,肯定不会想到自己的博客会被spam盯上。甚至还可能真认为是某老外关顾了自己的文章(博主曾经就二逼的用英文回复过)。等垃圾评论越来越多时,才仿然大悟。对于一些用wp时间也比较长的博主来说,一些与文章话题无关的评论也是很烦人。为了增强wordpress免疫力,尽量从根源上解决wordpress博客中的垃圾评论,博主也不能闲着,下面就贡献小小的一份力量。

2 博主的反wordpress垃圾评论历程

1、博客刚建立时,用的是wordpress垃圾评论屏蔽神器——Akismet,确实效果很好;

2、不过后来由于博主对插件不太看好,所以就改用了Willin Kan写的非插件的方法,效果也是挺不错的,就是代码量稍微有点大。具体大家可以参考一下:《屏蔽wordpress垃圾评论的方法(插件和非插件)》

3、之后没用Willin Kan的小墻工具了,直接使用验证码,发觉挺管用的。详见文章《博客优化第二波(三):wordpress评论添加算术验证码》

4、启用这个新主题后,集成 “访问安全提示” 和 “网站安全认证” 的功能,效果也不错。详见文章《关于博客评论的链接审查、网站认证的声明》

5、最近设置无Gravatar头像的用户无法提交评论,大家反馈意见不一。详见文章:《wordpress中限制没有Gravatar头像的访客提交评论》

6、昨天再次升级防护,新增用户昵称、评论内容提交时的黑名单中的关键词验证。也是本篇文章的主题,下面是具体的实现代码。

3 修改主题comments-ajax.php文件

在主题目录下的comments-ajax.php文件中,大概60行左右的位置(刚取得用户提交的评论表单中的$_POST['author']等字段)。然后在该文件中加上下面的代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/*
 * @Author:  vfhky 2013年09月21日22:13
 * @Variable string $word:  黑名单中的关键词,用户可自行按规律进行增加或减少
 * @Variable string $comment_author:  用户提交的$_POST['author']字段值,表示昵称
 * @Variable string $comment_content:  用户提交的$_POST['comment']字段值,表示评论内容
 **/
$words = "com,cn,info,net,www,http,cc,host,代理,移动,电,国,港,器,服,医,肥,药,农,信,贷,日,盈,网,票,域,销,黄,司,企,机,租,人,钱,设,购,播";
$word = explode(',', $words);
$num = count($word);
for($i=0;$i< $num ;$i++){
   if (strpos($comment_author,$word[$i],0) || strpos($comment_content,$word[$i],0)){
       err( __('广告必删,多谢理解!') );
       break;
   } 
}
4 后记

通过上面这段简单代码,我们就实现了提交对评论输入的用户昵称、评论内容进行了黑名单中的关键词的校验。一旦匹配到了上面的任何一个词语,例如出现了www,那么就提示用户“广告必删,多谢理解!”,效果如下图所示。这样算是又给博客上了一道保险,增强了wordpress反垃圾评论的免疫力,而且还是非插件的方法实现的哟!

wordpress关键词黑名单:反垃圾评论再升级(非插件)

5 BUG修复:Update 2013.09.24 20:20

经过 @坏坏博客 童鞋的邪恶回复测试,发现上面代码有未考虑周全之处。正在修改中,具体见下一篇文章《再议wordpress反垃圾评论:都是strpos函数惹的祸》。最后向 @坏坏博客 童鞋致敬!

打赏支持

Comments »