如今网络界,SEO满地抓,随便懂点网络知识就会从网上搜到SEO种种方法。于是乎,独立博客被瞄上了,相信很多wp用户开博不久就会有大批的垃圾评论Spam,不过几乎都是国外的,IP查过去都是澳洲、美洲...但是随着你的使用就会有越来越多的诸如:“**减肥”“**丰胸”“**seo”...

Spam用通俗的话来解释就是垃圾广告信息,但它是以文字链接或图片信息的方式存在于网络上的,早期存在于聊天室、电子公告板系统中,发展到中期慢慢出现在论坛帖子、回复和博客评论中。

对于这些,小博主还可以应对(一个个删除),但是如果你的的访客比较多的话,那就是麻烦事了。wp有很多插件,诸如Akismet,Comments Link Redirect...等都可以防御,但是奚少又不太喜欢一大堆的插件,于是在万戈那里找来了解决的方案。

1、用小墙抵御spam:

/* <<小牆>> Anti-Spam v1.82 by Willin Kan. 2010/12/16 最新修改 */
//建立
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"] . ' (透過代理)' : $_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; //不管 Trackbacks/Pingbacks
//方法一: 直接擋掉, 將 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();
// -- END ----------------------------------------

只需要将以上代码复制到主题文件中的 functions.php 中(<?php---?>内)即可,现在我已经可以完全抛弃 Akismet 插件了。

奚少用了两天,有三个Spam全部被拦截(表嘲笑我的访问亮哦...),可以说是100%,呵呵~有图有真相:

让wordpress抵御垃圾评论危害

2.为评论链接重定向跳转

也许一些朋友会疑惑,如果有漏网之鱼怎么办?如果这些外链很多都是链接到垃圾站,会让导致博客在搜索引擎(主要是百度,Google nofollow 到垃圾网站也是没事的)中的降权,直接导致排名下降。

那么就对评论者的链接进行重定向跳转,就算有 Spam 突破防线成功在你的页面驻扎,你也无需担心 Spam 会和当前页面抢权重了。(注:尽管评论者的链接本来就已经加了 rel="external nofollow" 属性,but百度这哥“不认识”nofollow 这个单词,Google 对 nofollow 的权重分布方法已经调整过了,站内链接有可能会抢去当前页面的权重,所以仅靠 nofollow 也是不行的了)

重定向方法如下:

//comments link redirect
add_filter('get_comment_author_link', 'add_redirect_comment_link', 5);
add_filter('comment_text', 'add_redirect_comment_link', 99);
function add_redirect_comment_link($text = ''){
$text=str_replace('href="', 'href="'.get_option('home').'/?r=', $text);
$text=str_replace("href='", "href='".get_option('home')."/?r=", $text);
return $text;
}
add_action('init', 'redirect_comment_link');
function redirect_comment_link(){
$redirect = $_GET['r'];
if($redirect){
if(strpos($_SERVER['HTTP_REFERER'],get_option('home')) !== false){
header("Location: $redirect");
exit;
}
else {
header("Location: http://www.xishao.net/");
exit;
}
}
}

将以上代码同样复制到主题文件中的 functions.php 中即可(注意:要将红色的链接改成你的哦,不然如果找不到链接就会跳转到奚少的小窝了~),这样就免去使用Comments Link Redirect 插件了!

在重定向前,评论者的链接都是形如“http://评论者的URL”,重定向后形如“http://www.xishao.net/?r=http://评论者的URL”

本文综合转载自万戈:Life Studio(wange.im)

15,990
更新日期: 2010-10-23
文章标签: ,,,,,,
文章链接: http://www.xishao.net/wp/408.html
站方声明: 除特别标注, 本站所有文章均为原创, 互联分享, 尊重版权, 转载请注明.