是的,自昨天开始遭遇了有史以来“技术含量”最高的垃圾评论,其中一部分绕过了 Akismet,它们@回复了往常的正常评论,相信有朋友已收到回复通知邮件了。他们是怎样做到的,难道手工提交?

接连不断的垃圾评论从昨天中午一直持续到今天上午,删不断、理还乱。事实证明不能完全指望 Akismet 了,总结了这些垃圾评论的共性:

  1. 清一色的英文评论;
  2. 评论中偶尔带有超链接 a href 标记;
  3. URL 栏填写的网址长度非常长,一般超过30个字符。

今天勇士队打的实在太狗屎了,不愿继续浪费精力关注了,转过来研究对付垃圾评论的方法:

针对第一条,可以通过屏蔽非中文的评论来实现,对于我在用的主题,有的评论通过@回复昵称中包含汉字的评论即可绕过这个限制,所以,这并不总是有效的。

针对第二条,可以过滤评论内容字符来实现,但有些垃圾评论,其内容中并没有超链接。

以上这两条很容易在网上找到现成的方法,很多时候是很管用的。

针对第三条,垃圾评论的 URL 通常长度很长(不低于30个字符长度),可以通过阻止 URL 长度超过一定限制的评论提交,从而达到屏蔽的目的,很遗憾没有找到这样的现成方法,好在找到这么一条信息:Spam Comments with Very Long URL’s

这个方法可将带有长 URL 的评论自动标记为垃圾评论,它有个天然的缺陷,只有待评论生成后才会处理,如此,不得不强迫自己再去审视一遍垃圾评论,不是我想要的,我想在它们被提交之前拒其门外。

禁止 URL 超过一定长度的垃圾评论

改造一下终于实现我想要的结果:禁止 URL 超过一定长度的垃圾评论提交,这里对 URL 长度做的限定为小于30个字符长度,否则不允许提交,这个方法仍旧会存在误伤,我想拿长度超过30个字符的域名写博客的人应该不多吧:

function mgy_spam_comments( $commentdata ) {
    $comment_author_url = 30;
    if ( strlen( trim( $commentdata['comment_author_url'] ) ) > $comment_author_url ){
        wp_die( "You are bullshit!" );
    }
    return( $commentdata );
}
add_filter('preprocess_comment', 'mgy_spam_comments');

为防止有鱼漏网,将屏蔽非中文和带有超链接的两个功能合到上面的代码中,得到:

function mgy_spam_comments($commentdata){
    $comment_author_url = 30;
    $pattern = '/[一-龥]/u';
    $http = '/[href="|rel="nofollow"|http:\/\/|< \/a>]/u';
    if ( strlen( trim( $commentdata['comment_author_url'] ) ) > $comment_author_url ){
        wp_die( "You are bullshit!" );
    } elseif ( !preg_match( $pattern, $commentdata['comment_content'])) {
        wp_die( "至少包含一个汉字" );
    } elseif ( preg_match( $http, $commentdata['comment_content'])) {
        wp_die( "You are bullshit!" );
    }
    return( $commentdata );
}
add_filter('preprocess_comment', 'mgy_spam_comments');

===========================================
更新:没想到刚上线就让http://synyan.net博主中招了,特意发邮件过来提醒,在此诚心对他表示道歉和感谢,请多多包涵。
现在做了调整,仅对 URL 长度做限制。

08年产的老电脑 ThinkPad T61(T7300、4G 内存、NVS 140M 显卡),由 win 7 升级到 win 10,没有体会到流畅,相反时有卡顿现象,CPU 占用率居高不下,基本不低于 30%,隔了一夜,不得不降回 win 7。

Windows 10

今晚又到公司活动室打了会乒乓球,昨晚也是在这里,不过,发生了尴尬的一幕。

当时,乒乓球桌不远处有些女同志正准备练瑜伽,穿的比较清凉。先别管我乒乓球水平如何,总之,我打球是倾向于快准狠那种风格的,通常,我的反手杀球更准更有力更致命,不巧,有个球激起了我的本能反应,屏气奋力挥出一个标准姿势,准备给对方一个反手大力致命一击,pia 的一声,球没落到对面球台,直接击中球桌旁边正准备练瑜伽的那个穿着最暴露的女同志的胸上了…

有点小尴尬,赶紧停下来招手致歉,幸好一起打球的一位小伙伴跟这位女同志相识,只见她手捂着胸,只几秒,一丝惊愕和尴尬的脸上也咧开嘴笑了。