この記事の概要
ここにもとうとうトラックバックスパムが大量来襲。てことでちょっくら頭をひねってみました。はい、いつも尻に火がついてから行動するタイプです。
NP_Blacklistの力を借りて、トラックバックスパムを防止。
NP_Trackback.phpに少しコードを追加するだけです。
※Blacklistはアルファ版ではなく(たぶんコードがクリーンアップされたVer0.94以降の)Ver0.95b2以降の新しいバージョンがインストールされていることが前提です。Blacklist Ver0.95b2 のレビューはこちら。
追記:Blacklistプラグインのログ書き込みを改良するハックも加えました。
追記:Blacklist Ver0.96 Final以降の人は対策2をチェック!
追記:最新版ではこれらの改造の必要はありません(この記事自体がだいぶ昔の話なので・・)。別のアプローチとして、Javascriptを利用した「NP_Trackback を改造して スパム対策」というのもあります。
NP_Trackback.phpをいじる
400行あたりにある handlePing ファンクションを探します。そこの、
// 2. check for errors
if (!$tb_id) return 'TrackBack ID is missing (tb_id)';
if ($rss == 'rss'){
$this->rssResponse($tb_id);
return ;
}
if (!$url) return 'URL is missing (url)';
の次に、以下のコードを挿入します。
//_hack: prevent trackback spam
if ($manager->pluginInstalled('NP_Blacklist') and
$plugin =& $manager->getPlugin('NP_Blacklist')) {
$type = 'trackback';
$testString = $url.' '.$title.' '.$blog_name.' '.$excerpt;
$plugin->blacklist($type,$testString);
}
これだけ。ブロックされたトラックバックスパムは、コメントスパム同様にBlacklistのログで確認できます。
まだ自分で自分にspam送信、Blacklistによるチェックをしただけなので、ほかに影響があるかどうかチェックしきれてませんが、たぶん大丈夫ではないかと。しっかりトラックバックスパムを捕捉してくれてます。とくに運用上の問題はおきていないです。こういうときはトラックバックがプラグインとして用意されてるのは悪くないなと実感しますね。いじりやすくて。
細かい話。$typeに渡してる"trackback"という値はじつは適当なんですが、Blacklistのコードを追うとたまたま条件分岐で"comment"と同じ処理をされるのがわかると思います。
Blacklistプラグインのログを改良
追記。コメントスパムとトラックバックスパムの区別をログに記載させることにします。 (0.95finalではすでに改良されてます) NP_Blacklist.phpの中の blacklist ファンクションを一行、変更します。後半部を以下に変更。
if($spamDetected != "") {
if ($type == 'refer' && $this->getOption('referrerlog') == 'yes') {
pbl_logspammer('referrer; http://'.$testString.'/: '.$spamDetected);
} else if ($type != 'refer') {
//pbl_logspammer($spamDetected); ↓この行を下に変更
pbl_logspammer($type.': '.$spamDetected);
}
redirect($redir);
exit;
}
kazu:
今まではコメントスパムしか来てなかったのですが、祝トラックバックスパム初襲来。
Movable Typeなんで、MT-Blacklistというプラグインを使いました。