今天我打开Wordpress博客的后台,我直接崩溃了,272条垃圾评论,之前换主题之前还没有如此多的垃圾评论,我左思右想,终于明白了,原来这个主题我没有添加评论验证,现在看来真的很有必要了。
幸亏 Willin Kan 的Anti-Spam v1.83全都给我拦截了,好样的,我甚是喜欢这个Anti-Spam了,
下面是Anti_spam的代码,直接丢到主题的Fuctions.php中,注意,我把代码中的“无头像评论标记为待审”功能去掉了,这样可以防止少部博友被列入待审列表中。
/* <<小牆>> Anti-Spam v1.83 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’];
$IP = $_SERVER[‘REMOTE_ADDR’]; // 可用於屏蔽 IP
$way = isset($_POST[$w]) ? ‘手動操作’ : ‘未經評論表格’;
$spamcom = isset($_POST[‘comment’]) ? $_POST[‘comment’] : ”;
$_POST[‘spam_confirmed’] = “請求: “. $request. “\nIP: “. $IP. “\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 ) {
$blacklist = get_option(‘blacklist_keys’);
update_option(‘blacklist_keys’, $comment[‘comment_author’] . “\n” . $blacklist);
}
}
$anti_spam = new anti_spam();
// — END —————————————-
可是这也不是长久之计,大部分垃圾评论是纯外文的,要不再添加一个过滤纯外文的代码,这个代码不知道是谁写的,也很不错~~
以下是代码,和上一个一样的,直接添加到主题的Fuctions.php中
/*
add_theme_support(‘automatic-feed-links’); // Add default posts and comments RSS feed links to head
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’);
据分析垃圾评论的来源时,大部分垃圾评论直接通过博客的页面提交评论的,那么在页面上我们要不要加个验证问题,比如简单的数学运算?
好的接下来我给大家推荐我珍藏了很久的的代码,不用任何插件,只需简单修改主题即可~
首先将以下代码添加到主题的Fuctions.php中。
class zxdRoboCheck{
function roboCheck($comment){
$user_id=get_current_user_id( );
if($user_id !=0) return($comment);
if (empty($_POST[‘robo’]) || trim($_POST[‘robo’]) == ” ) {
wp_die( __(‘喂!你是不是那个算数题是不是没有回答?赶紧点击这里<a href=”javascript:history.back(-1)”>返回上一页</a>,继续你的吐槽~’));
}
$robo_num1 = (int)$_POST[‘robo’];
$robo_num2 = (int)$_POST[‘rnum’];
if ( $robo_num2 == $robo_num1) {
return($comment);
}
else {
wp_die( __(‘嘿嘿~~ 这么简单的运算,居然算对了!你好厉害呀!赶紧点击这里<a href=”javascript:history.back(-1)”>返回上一页</a>,继续你的吐槽~’));
}
}
}
if (class_exists(“zxdRoboCheck”)) {
$aRoboCheck = new zxdRoboCheck();
add_filter(‘preprocess_comment’, array($aRoboCheck, ‘roboCheck’), 1);
}
接下来把把以下代码放到你主题的适当位置,一般在主题的comments.php中修改,放到“站点”文本框的后面,你也可以按照具体情况放置位置了。
if (!$user_ID){ //这里判断是不是管理员,如果是管理员则不显示验证
//评论验证说明 rand(1,9)指的是产生一个从1之9之间的随机数。
$rnum1 =rand(1,7);
$rnum2 = rand(2,8);
$rnum = $rnum1 * $rnum2; //运算方式是进行乘积
?>
<span style=”padding-right:20px;width:140px;height:32px”>
<span style=”padding-left:10px;”><?php echo $rnum1;?>乘<?php echo $rnum2; ?>=</span>
<input id=”robo” name=”robo” type=”text” value=”” size=”10%” aria-required=”true” style=”width:20px;” />
<input id=”rnum” name=”rnum” type=”hidden” value=”<?php echo $rnum; ?>” size=”0″ aria-required=”true” class=”hide” />
</span>
<?php }?>
我以上代码美化了,现在看起来很舒服,测试我通过了~~
经过这么一段时间的折腾,垃圾评论是算是遏制了
以上代码已经添加到本博客了,欢迎测试~~~
从此我的所有访客都要进行复杂的脑力运算后才能通过我的审核~~(*^__^*) 嘻嘻……