WordPress 评论和垃圾评论似乎天生是一对“孪生兄弟”

无论在国内还是国外的空间主机上搭建的Wordpress博客,无论Wordpress有多少流量多么低的权重,垃圾评论都会自动找上门来,假如有好几天没有进Wordpress后台查看的话,当你再一次“踏入”时却发现垃圾评箱已经爆满了。

WordPress垃圾评论数量多容易掩盖正常的读者评论,批量删除垃圾评论又容易造成误删,WordPress垃圾评论发布机器持续不断地向网站提交评论请求,频率足够高的话则变演变成一种网站攻击,配置差一些的网站主机很有可能因此而运行缓慢,严重者造成服务器宕机,无法正常访问。

WordPress的垃圾评论的危害是不言而喻的,对付Wordpress垃圾评论不仅要“阻断”垃圾评论的发布,更要提前“阻止”垃圾评论的提交,要让垃圾评论无处可藏,无机可趁。

 

一、Wordpress自带的反垃圾评论设置

1、Wordpress作为一个博客程序,实际上也自带了一些简单的防止垃圾评论的设置。

如果能够充分利用好这些功能,就能从Wordpress程序本身达到一定的反垃圾评论效果了。

 

2、用户必须注册并登录才能发表评论(万不得已时,可用此下策

如果选择了这一项,基本上就可以阻止所有的垃圾评论了。

WordPress管理后台 —> 设置 —> 评论

wordpress-prevents-spam-comments-01

 

3、评论者先前须评论通过了审核。

勾选了这个的话,第一次在Wordpress发表评论的都会进入到审核队列中,第二次发布评论就会自动显示出来了。

WordPress管理后台 —> 设置 —> 评论

wordpress-prevents-spam-comments-02

 

4、评论黑名单。

当评论的内容、评论者名称、URL、电子邮件或IP地址中包含其中任何关键字时,系统将自动将评论标记为“垃圾评论”。

一行一个关键字或IP地址,WordPress也会在词中匹配关键字,例如“press”亦将匹配“WordPress”。

WordPress管理后台 —> 设置 —> 评论

wordpress-prevents-spam-comments-03

5、优缺点分析:

  • 1、只有注册才能发表评论功能不适合开启,否则正常用户的评论的热情也会下降,但有人研究发现这样会有利WP注册用户的增加。
  • 2、只有之前有通过审核评论的第二次自动显示出来,对反垃圾评论很帮助,建议开启,但是老用户如果换了邮箱则又会当新用户,评论仍需审核。
  • 3、评论黑名单功能可以搭配其它的Wordpress反垃圾评论方法一起使用,它可以起到“查漏补缺”的作用,关键时候发挥重要作用。

 

二、Wordpress智能反垃圾评论插件:Akismet 和NoSpamNX

1、Akismet 官网:

插件地址:https://akismet.com

wordpress-prevents-spam-comments-04

2、Akismet是Wordpress官方推荐用的反垃圾评论插件,是Wordpress自带的。

工作原理是:将留下的评论用户记录提交到一台服务器,服务器根据历史记录(之前有没有人把这条评论标记为 Spam),以及一些特定的算法来判断是不是垃圾评论。

3、Akismet启用前需要到Akismet官网获得一个序列号,现在启用了Akismet后可以直接在后台看到评论的统计数据。

Akismet有一个好处,就是它可以阻止一些已经被判定为垃圾评论者继续用你的博客提交评论。

 

4、NoSpamNX官网:

插件地址:https://wordpress.org/plugins/nospamnx/

wordpress-prevents-spam-comments-05

5、NoSpamNX反垃圾评论的方法与Akismet不同,安装了NoSpamNX插件后,博客评论框的 name 属性改成了随机数,并添加一个新的隐藏的评论框,Spambot发评论时会把隐藏的评论框也填满数据,而人工评论不会是这样。插件根据此特征从而Block掉机器人的垃圾评论。

6、优缺点分析:

1)Akismet优势在于不仅能对付机器人发布垃圾评论,也可以阻止一些人工发布垃圾评论。但是Akismet存在着误杀的概率,屏蔽掉的垃圾评论会留在数据库,30天后才自动删除。部落发现Akismet会导致评论提交变得更耗时。

2)NoSpamNX的优势在于比Akismet更有效率,且不存在误垃圾评论的问题,也不会产生什么数据库记录。但是NoSpamNX仅仅对付垃圾评论机器人有效果,一些人工垃圾评论则可能无法阻止。

 

三、Wordpress评论人工验证插件:myQaptcha, Fancy Captcha, SI CAPTCHA

WordPress垃圾评论90%以上都是由机器人产生的

如果能够阻止这些机器人发布的垃圾评论,Wordpress反垃圾评论也就成功了一半了。

myQaptcha、Fancy Captcha、SI CAPTCHA 三款插件就是用来验证发表评论是不是人工或机器。

 

1、myQaptcha 测试成功,强烈推荐

插件地址:https://wordpress.org/plugins/myqaptcha/

插件下载:myQaptcha.zip   (官方版本)

插件下载:myqaptcha-auto-comment.zip

实现效果: Jack的机器人     米扑博客     张戈博客(拖拽后自动提交)

myQaptcha依据Qaptcha这个jQuery开源plugin整合的Wordpress插件,

主要作用就是在用户发表评论前需要拖动解锁,机器人发表评论肯定是不能完成这个动作的。

兼容PC、手机、平板等跨平台、多浏览器,因此米扑博客最终也选择此方案演示效果

注意:米扑博客在添加过程中,遇到了jQuery找不到的问题,最终发现是引入百度推荐的jQuery覆盖了通用的jQuery,导致无法识别,最终注释掉了百度给的jQuery,只使用官方通用的jQuery脚本,问题解决 ^_^

 

 

2、Fancy Captcha测试成功,手机上不支持拖拽,不推荐

插件地址:https://wordpress.org/plugins/wp-fancy-captcha/

插件下载:wp-fancy-captcha.1.5.2.zip

实现效果:米扑博客 (插件已实现,但没启用,因不兼容手机平板滑动操作)

按照图中提示语,评论者选择对应图形拖至右侧圆形区就可以解锁评论了。

安装方法:直接在管理后台 —>  插件 —> 上传安装 —> 开启插件

中文汉化:插件配置里,把英文翻译成中文,如下图:

修改外观:修改插件的一些外观css,其文件路径为:

vim wp-content/plugins/wp-fancy-captcha/captcha/captcha.css

Fancy Captcha与myQaptcha有点类似,启动插件后,评论者需要拖动指定的小工具到圆环中才可以发表评论。

但是,Fancy Captcha存在浏览器兼容性问题,特别是在移动手机上的交互问题,因此严重不推荐此插件

 

 

3、SI CAPTCHA (兼容PC、手机、平板等多平台,推荐​)

插件地址:https://wordpress.org/plugins/si-captcha-for-wordpress/

插件下载:si-captcha-for-wordpress.zip

演示效果: 米扑博客    酷壳博客

SI CAPTCHA Anti-Spam 是一个WordPress 验证码插件,需要输入图形验证码,兼容PC、手机、平板等多平台,推荐

插件设置项:

可以给注册页面、登录页面、找回密码页面以及评论功能等添加验证码,发表评论前必须输入图形验证码。

 

 

4、Google Captcha (reCAPTCHA) by BestWebSoft 不必输入图形验证码,强烈推荐

插件地址:https://wordpress.org/plugins/google-captcha/

插件下载:google-captcha.1.32.zip

演示效果:国外的某些网站

Google Captcha (reCAPTCHA) by BestWebSoft 插件是被 SI Captcha Anti-Spam 推荐才知道的,推荐词如下:

If you do not like image captcha and code entry, you can uninstall this plugin and try my new pluginFast Secure reCAPTCHA with Google No CAPTCHA reCAPTCHA

Google Captcha (reCAPTCHA) by BestWebSoft 插件优点,不必加载图片和输入验证码,非常简洁,所以强烈推荐。

但是,此插件需要注册谷歌获取API keys,由于某种原因无法访问获取,所以又不推荐

类似的还有一款简洁版的验证插件如下,前提是仍然需要谷歌的API Keys

Simple Google reCAPTCHA

 

四款插件优缺点对比

1)myQaptcha 很酷,很简洁,存在可能的浏览器兼容问题,但还是强烈推荐

2)Fancy Captcha 很酷,有点复杂,存在浏览器兼容问题,但在手机上无法拖拽图标操作,所以不推荐使用

3)SI CAPTCHA Anti-Spam 有点酷,有点复杂,需要输入图形验证码,但是功能强大的插件,不仅对于反垃圾评论有效果,还可以防止Wordpress恶意注册、WP后台账号暴力破解等,几乎兼容所有PC、手机、平板等跨平台,所以还是推荐

4)Google Captcha (reCAPTCHA),很酷,很简洁,不需要输入图形验证码,但是谷歌的产品,访问不稳当,所以不推荐

米扑博客,最后倾向于推荐: 1)myQaptcha 和  3)SI CAPTCHA Anti-Spam

 

 

四、Wordpress防止垃圾评论纯代码实现

willin kan的反垃圾评论代码

1、willin kan的反垃圾评论代码在网上用的人比较多,实际测试效果也比较好,特别适用于那些讨厌Wordpress插件、喜欢自己折腾WP程序的博主们使用。

wordpress-prevents-spam-comments-09

2、将以下代码放到你的主题的function.php中。

// 垃圾评论拦截
class anti_spam {
    function anti_spam() {
        if ( !current_user_can('level_0') ) {
            add_action('template_redirect', array($this, 'w_tb'), 1);
            add_action('init', array($this, 'gate'), 1);
            add_action('preprocess_comment', array($this, 'sink'), 1);
        }
    }
    function w_tb() {
        if ( is_singular() ) {
            ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)/textarea>#",
                "textarea$1name=$2w$3$4/textarea><textarea name=\"comment\" cols=\"100%\" rows=\"4\" style=\"display:none\"></textarea>",$input);') );
        }
    }
    function gate() {
        if ( !empty($_POST['w']) && empty($_POST['comment']) ) {
            $_POST['comment'] = $_POST['w'];
        } else {
            $request = $_SERVER['REQUEST_URI'];
            $referer = isset($_SERVER['HTTP_REFERER'])         ? $_SERVER['HTTP_REFERER']         : '隐瞒';
            $IP      = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透过D理)' : $_SERVER["REMOTE_ADDR"];
            $way     = isset($_POST['w'])                      ? '手动操作'                       : '未经评论表格';
            $spamcom = isset($_POST['comment'])                ? $_POST['comment']                : null;
            $_POST['spam_confirmed'] = "请求: ". $request. "\n来路: ". $referer. "\nIP: ". $IP. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 记录成功 --";
        }
    }
    function sink( $comment ) {
        if ( !empty($_POST['spam_confirmed']) ) {
            if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;
            //方法一: 直接挡掉, 將 die(); 前面两斜线刪除即可.
            die();
            //方法二: 标记为 spam, 留在资料库检查是否误判.
            //add_filter('pre_comment_approved', create_function('', 'return "spam";'));
            //$comment['comment_content'] = "[ 判断这是 Spam! ]\n". $_POST['spam_confirmed'];
        }
        return $comment;
    }
}
$anti_spam = new anti_spam();

 

3、注意:代码最后提供了两种对付垃圾评论的办法,一种是直接阻止评论,另一种是将垃圾评论放在Wordpress评论的待审核队列中,默认的是第一种,如果你想使用第二种,请给die();加上//,然后去掉“方法二”下面代码的//符号。

4、优缺点分析:

  • 1、直接使用纯代码就可以达到Wordpress反垃圾评论的效果,效率自然要好于使用一些Wordpress插件,这也是为什么不少人喜欢用代码来代替插件要实现的功能。
  • 2、willin kan的反垃圾评论代码也有可能造成一些误判,为了最大限度地留住所有人的评论,我们可以将评论放在待审核队列中,方便我们自己人工来判定。

 

五、Wordpress防止垃圾评论纯代码实现

阻止全英文和含有日文字符评论

1、根据观察,Wordpress的垃圾评论中有95%是全英文评论和含有日文字符的评论,如果能够禁止这些评论的提交,也就基本上达到了Wordpress防止垃圾评论的目的了。

2、将以下代码放入function.php中,就可以阻止全英文的评论了。

function scp_comment_post( $incoming_comment ) {
    $pattern = '/[一-龥]/u'; 
    // 禁止全英文评论
    if(!preg_match($pattern, $incoming_comment['comment_content'])) {
        wp_die( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" );
    }
    return( $incoming_comment );
}
add_filter('preprocess_comment', 'scp_comment_post');

 

3、将以下代码放入function.php中,就可以阻止包含任意日文字符的评论了。

// 禁止日文评论
function BYMT_comment_jp_post( $incoming_comment ) {
$jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';
if(preg_match($jpattern, $incoming_comment['comment_content'])){
wp_die( "禁止有日文字符的评论 You should type some Chinese word" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'BYMT_comment_jp_post');

 

4、优缺点分析:

  • 1、阻止全英文评论和含有日文字符的评论效果是不错的,从部落的使用体验来看,基本上阻止了绝大多数的Wordpress垃圾评论,当然也一两个“漏网之鱼”。
  • 2、缺点也很明显,它会阻止一些正常的评论,例如有些技术性的文章会用到编程代码,不会中文的“国际友人”等等,在评论时都会遇到无法评论的情况。

 

六、Wordpress防止垃圾评论方法小结

1、总得来看,WordPress自带的反垃圾评论功能设置+纯代码防止垃圾评论是最有效果的,也就是最有效率的,建议采用此方法的朋友先在本地做测试,防止代码不兼容导致网站无法访问。

2、从用户体验来看,使用SI CAPTCHA 的用户体验是最差的,而myQaptcha和Fancy Captcha则符合人“懒”的习惯和越简单越好的心理要求,对正常的评论者不会造成太大的影响。但是myQaptcha和Fancy Captcha存在浏览器兼容性问题,特别是在移动手机上的交互问题,严重不推荐 Fancy Captcha

 

 

参考推荐

WordPress 最全的评论插件

WordPress 必备插件