WordPress 垃圾评论处理方法

  • A+
所属分类:随笔分享

好久没有折腾 WordPress 程序本身了,突然发现后台的垃圾评论竟然已经有一千八百多条了,而我本身是安装了 Akismet 反垃圾评论的插件的。可见虽然 Akismet 自诩“对大多数人来说,Akismet 将大量减少甚至彻底消灭垃圾评论和不良 trackback 引用通告。即使有漏网之鱼,您只需将其标成“垃圾评论”,然后 Akismet 会自动从失误中学习。”,效果还是非常有限的。

wordpress spam 1

wordpress spam 2

从上面的垃圾评论内容来看,无外乎两大类,一类是纯鸟语(英语或其他非汉语语种),一类是太水了的灌水(本站不排除灌水,但至少有点意义)。既然源头找到了,那就要寻求解决的方案。根据实际使用情况,可以通过以下几个方面的操作吧垃圾评论减少到最低。

【一、Akismet 插件反垃圾评论】

虽说 Akismet 只能起到拦截作用,而根本阻止不了垃圾评论,但是其作用还是不可小觑,否则垃圾评论泛滥,岂不影响阅读。关于此插件的安装使用,这里就不用多说了,因为这是 WordPress 自带的插件之一,只要按照说明启用就可以了。

【二、判断有无中文字符反垃圾评论】

原理是判断评论内容是否包含汉字,如果一个汉字都没有,则给出错误提示,评论无法提交,这样垃圾评论也没有存储到数据库中,达到了屏蔽英文垃圾评论的目的。这个对于纯鸟语类的垃圾评论非常有效,也省了进后台数据库需要手动清理的过程。

操作的方法是打开当前使用的主题目录下的 functions.php ,将第一个 < *php(*为?)替换成: [php] <?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'); [/php] 注意要在 wordpress 后台修改或者通过 notepad 等工具修改,保存为 utf-8 格式,否则容易出错。 【三、小墙工具反垃圾评论】 Willin Kan 写的小墙工具,理论上可以 100% 屏蔽自己人发出的 spam。如果是自然人提交评论,小墙会在评论提交表单中加一个 hidden 变量,如果后台检测不到这个变量,则认定为 spam,可以选择需要审核,也可以直接过滤掉。 如果对方知道你用的 hidden 变量或者使用虚拟点击,就可以破掉小墙。但是 spam 本来就是小成本和以量取胜的事情,除非与你与 spammer 结仇了,我相信人家不会那么无聊来破你小墙。而且机器人 spam 的数量占了绝大多数。这个工具很有必要。 貌似 Willin 现在不用 WordPress 了,网站也正在维护,小墙代码我就贴在下面。使用方法很简单,拷贝到 function.php 文件最后即可。

[php]
/* <<小牆>> Anti-Spam v1.84 by Willin Kan. */
class anti_spam {
function anti_spam() {
if ( !current_user_can('read') ) {
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() ) {
// 非中文語系
if ( stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh') === false ) {
add_filter( 'comments_open', create_function('', "return false;") ); // 關閉評論
} else {
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() {
$w = 'w';
if ( !empty($_POST[$w]) && empty($_POST['comment']) ) {
$_POST['comment'] = $_POST[$w];
} else {
$request = $_SERVER['REQUEST_URI'];
$way = isset($_POST[$w]) ? '手動操作' : '未經評論表格';
$spamcom = isset($_POST['comment']) ? $_POST['comment'] : '';
$_POST['spam_confirmed'] = "請求: ". $request. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 記錄成功 --";
}
}
// 處理
function sink( $comment ) {
// 不管 Trackbacks/Pingbacks
if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;
// 已確定為 spam
if ( !empty($_POST['spam_confirmed']) ) {
// 方法一: 直接擋掉, 將 die(); 前面兩斜線刪除即可.
//die();
// 方法二: 標記為 spam, 留在資料庫檢查是否誤判.
add_filter('pre_comment_approved', create_function('', 'return "spam";'));
$comment['comment_content'] = "[ 小牆判斷這是Spam! ]\n". $_POST['spam_confirmed'];
$this->add_black( $comment );
} else {
// 檢查頭像
$f = md5( strtolower($comment['comment_author_email']) );
$g = sprintf( "http://%d.gravatar.com", (hexdec($f{0}) % 2) ) .'/avatar/'. $f .'?d=404';
$headers = @get_headers( $g );
if ( !preg_match("|200|", $headers[0]) ) {
// 沒頭像的列入待審
add_filter('pre_comment_approved', create_function('', 'return "0";'));
//$this->add_black( $comment );
}
}
return $comment;
}
// 列入黑名單
function add_black( $comment ) {
if (!($comment_author_url = $comment['comment_author_url'])) return;
if ($pos = strpos($comment_author_url, '//')) $comment_author_url = substr($comment_author_url, $pos + 2);
if ($pos = strpos($comment_author_url, '/')) $comment_author_url = substr($comment_author_url, 0, $pos);
$comment_author_url = strtr($comment_author_url, array('www.' => ''));
if (!wp_blacklist_check('', '', $comment_author_url, '', '', '')) update_option('blacklist_keys', $comment_author_url . "\n" . get_option('blacklist_keys'));
}
}
$anti_spam = new anti_spam();
// -- END ----------------------------------------
[/php]

注意点:如果你只是 copy 代碼去用,那只是基本運用而已,還是會被破解的。命名應該有所變化,人人都不同,讓 spammer 找不到規律。

举例:

小墙用 name=’w’ 為評論欄,你可改為 a、b2、c3f7、text543col、spam987。。。只要首字為英文,其它字元符合命名規則的都可以。大家用的欄位名都不一樣,誰會知道該填哪一格,自然不易被破解。

否則 spam 設定填入 ‘w’ 的話,全部用 ‘w’ 的小牆要全倒。要改的位置有兩個:一個是 18 行 $2w$3 中間的 w,一個是 24 行 $w = ‘w’;後面的 w,改的兩個字串要完全一樣。

【四、验证码反垃圾评论】

很传统的一个方法,就是评论前增加一个验证码,可以是一串数字、一个算式或是几个字母,相关的功能一般通过插件即可实现。个人不是很喜欢这样的方式,因为对于 WordPress 来说,评论前已经要填写昵称、邮件、网址的信息了,再增加一个验证,用户体验极其不好。因为不是所有博主都有记录 cookie 的功能,也很少人会用火狐插件easycommentChrome扩展应用:LastPass自动填写表单及密码管理来实现自动填充。

【五、登录后评论反垃圾评论】

此法和第四种可谓异曲同工,有人喜欢有人不喜欢。此类插件现如今比较流行,比如多说、比如灯鹭、比如点点。不过对于我来说,还是不喜欢。也就是说强加给我的,我可以选择不要。

除了上述几个方面可以防止或减少垃圾评论之外,其实 WordPress 自身也有反垃圾措施——评论审核以及黑名单。具体设置在“设置”——“讨论”里,其功能也是异常巨大的,但是为了省事以及避免误删,通常我们都选择了默认,有需要的也可以自行去设置。综上,对于 WordPress 垃圾评论的处理方法是比较多的,通常需要几方面结合起来才能达到最终所需要的结果。就个人而言,准备上马小墙工具,相信有了 Akismet 以及小墙,应该可以抵制垃圾评论了。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:17   其中:访客  17   博主  0

    • 垃圾站 垃圾站 2

      禁止全英文评论很好,不过有的垃圾评论还会带一些日语和汉字,都会带链接……

      • 刘晓林 刘晓林 4

        我好像直接删除就行了