教你彻底拒绝WP垃圾评论,从验证码开始
作者:秋了秋 发表时间:2014年04月02日
之前刚用wordpress的时候,垃圾评论特别猖狂,动不动每天几十条垃圾评论,而且几乎都是国外评论机发的,每天我也不寂寞,就是登登后台,删删垃圾评论,如果没有发现误拦的正常评论,几乎是一键清空,我不知道发垃圾评论的人花了多少时间来发评论,反正我删垃圾评论只要一秒钟,很爽!时间久了,老外不罢休,依旧发,我大概总览了一下全局,几乎都那几个ip,于是我把这几个ip用.htaccess文件规则屏蔽掉,具体做法就是在.htaccess文件中(该文件在网站根目录),加入一下规则:
Order Deny,Allow Deny from 188.143.232.12 Deny from 192.99.2.73 Deny from 198.100.146.23 .......
你需要做的就是把这些ip换成发垃圾评论的ip,有多少添多少。话是这么说,如果发垃圾评论的人比较多,这样也是一件很麻烦的事,况且,加得太多,使得.htaccess文件臃肿,读取也困难。这方法主要是针对垃圾评论ip比较集中,专攻型垃圾人物的办法。
加了之后,我发现垃圾评论几乎很少了,而且那几个ip永远不会再出现,哈哈哈
过了一阵子发现又一波“僵尸”来袭,可能我拦截了发垃圾评论人的ip,它很生气了,它认为我怎么那么不懂事呢,怎么可以拦它的ip呢,于是它就换着ip来攻击,成功躲过.htaccess文件规则拦截,可喜可贺!
话说我也不能由着你猖狂吧,猖狂就猖狂呗,干嘛拿英文忽悠我,虽然我刚过四级,可是对于那些sexy的单词有些还是认不出来的,于是我在主题的function.php中加入以下规则:
// 禁止全英文评论
function scp_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
err( __('<span style="color: red;">亲,貌似你狠喜欢纯英文,来点中文怎么样!</span>'));}
return( $incoming_comment );}
add_filter('preprocess_comment', 'scp_comment_post');
于是每当垃圾评论者(国外)发布它们的母语评论时,都会被“亲,貌似你狠喜欢纯英文,来点中文怎么样!”这句话吓倒!因为它不知道什么意思,但又发不了评论。
于是垃圾评论几乎被断绝了。(如果你真有国外朋友评论,这方法也会拦截你朋友)
后来,后来它自己琢磨来琢磨去,它发现在英文中夹杂一两个韩语或者日语,嘿嘿!居然能通过,于是又一小波“僵尸”来袭,原来我斩僵尸是如此熟练,只是单纯的手起刀落,手起刀落,手起刀落.....它也爱上了我炉火纯青的刀法~
后来看它傻乎乎地不断地发着类似的评论,它应该整天被自己的强迫症弄得脑瘫了,成木乃伊了,竟然是木乃伊,应该也许看不懂验证码吧,对,就给你来个验证码,考考你的智商,如果你的智商不过关的话,是发不了哦亲!
该给你弄个什么样的验证码呢,如果弄成图片的,我觉得不太好,好好的大中华文字你不用,干嘛用图片呀,我浏览网页还要多加载一个考国外人智商的图片,慢不慢呀!多不多余呀。整几个文字就行了,竟然外国人不识中文,数字全球应该通用吧,那就弄个1+1=?的给你做。
于是我在主题的comments-ajax.php(主题没此文件的在网站根目录找wp-comments-post.php)文件中搜索if ( '' == $comment_content )在其上面加载以下代码(此代码修正网上bug<验证码输错后网页错位的现象>):
// 评论验证码 if ( !$user->ID ) { $aaa = trim($_POST[aaa]); $bbb = trim($_POST[bbb]); $subab = trim($_POST[subab]); if((($aaa+$bbb)!=$subab)|| empty($subab)){ err( __('<span style="color: red;">错误提示:请正确输入的两数相加的和.</span>') );}}
加载后再到主题的comments.php在适当位置(可以在发表评论按钮后面加)添加调用代码:
<?php if (!$user_ID) : ?> <?php $aaa=rand(0,5); $bbb=rand(3,9); ?> <p><input type="text" name="subab" id="subab" size="6" tabindex="4"/></small><input name="aaa" value="<?php echo $aaa; ?>" type="hidden" /><input name="bbb" value="<?php echo $bbb; ?>" type="hidden" /><small> =</small><?php echo $aaa; ?>+<?php echo $bbb; ?><label for="Validation"><small> (验证码)</small></label></p> <?php endif; ?>
ok!看看我的评论功能吧!
本文出处“秋叶网络博客”,原文地址//netblog.cn/blog/7.html