另类WordPress防垃圾评论方法

2010-09-17 10:40 by hackerzhou

在博客逐渐进入轨道之后,特别是被搜索引擎索引了之后垃圾评论也就随之而来,这个问题相当普遍。最近明显感到本博客的垃圾评论变多了,虽然用Akismet可以拦截掉,但是由于Akismet有一定的误拦几率,时不时还得去翻翻垃圾箱。

网上普遍的方法是用那些验证码的插件,或者用Math Comment Spam Protection之类的算术插件来防止机器人恶意评论。我不太喜欢用额外的插件,毕竟会有导致不稳定的风险。而且我用了WP Super Cache做html的缓存,那些基于hidden字段等需要动态修改html代码的方法对我就不太适用了。今天早上突然想到为何不直接修改提交评论的表单呢?因为那些自动发文的大都是程序根据wordpress的模板,向wp-comments-post.php通过POST方式提交数据,如果把那些提交参数的名字修改掉就可以很大程度上过滤掉垃圾评论(并不严格,要是那些自动评论的软件采用页面自动分析等手段获得input的name属性就无效了,不过我觉得它们没有那么智能)。

修改方法如下:

1.修改html表单(找到你所使用的主题目录下的comments.php文件,打开并编辑)
比如我就将input的name属性都加上了hz-hc-前缀,并修改id属性,大家可以随心所欲修改,最好有规律点,否则后面修改wp-comments-post.php的时候会比较抓狂

<input type="text" name="hz-hc-arg0" id="arg0" .../>
<input type="text" name="hz-hc-arg1" id="arg1" .../>
<input type="text" name="hz-hc-arg2" id="arg2" .../>
<textarea name="hz-hc-arg3" id="arg3" .../>

2.修改后台(找到wordpress根目录中的wp-comments-post.php,打开并编辑)
$POST[“XXX”]中XXX的就是上面html表单中你自己制定的input的name

$comment_author = (isset($_POST['hz-hc-arg0'])) ? trim(strip_tags($_POST['hz-hc-arg0'])) : null;
$comment_author_email = (isset($_POST['hz-hc-arg1'])) ? trim($_POST['hz-hc-arg1']) : null;
$comment_author_url = (isset($_POST['hz-hc-arg3'])) ? trim($_POST['hz-hc-arg2']) : null;
$comment_content = (isset($_POST['hz-hc-arg3'])) ? trim($_POST['hz-hc-arg3']) : null;

修改好之后还需要去修改主题的js文件,比如我用的mystique主题就是修改jquery.mystique.js文件,查找target_id=”#comment”;修改成上面定义的input的id,target_id=”#arg3″;

这样就搞定了,不用任何插件。貌似后来查到有一款插件也是这么做的,只不过跟Math Comment Spam Protection整合了一下,加上了些算术验证。

本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 hackerzhou 并包含 原文链接
发表评论

本文有 9 条评论

  1. 小孙
    2013-11-05 11:40

    哦!发现你用的的确是wordpress!

  2. 小孙
    2013-11-05 11:39

    话说你用的博客程序不是wordpress么?

  3. 我很忙
    2011-07-22 15:11

    这个方式 感觉可以
    如有需要 在去使用

  4. only博客
    2010-10-06 12:29

    这种方法好,可以有效杜绝机器人评论~

  5. hackerzhou
    2010-09-17 23:31


    德意:

    我喜欢你这种方法,不用插件能让wp跑得更快。

    呵呵,我打算试验一阵子看看这个方法是不是足够强大到拦截掉绝大多数垃圾评论。Akismet误拦的概率太高了,刚刚你的评论就被拦截到垃圾箱里了,囧。不过这样修改了之后可能需要修改主题里的js文件,否则id变了之后一些功能可能受影响。

  6. 德意
    2010-09-17 21:04

    我喜欢你这种方法,不用插件能让wp跑得更快。

发表评论