Yuriko.Net 個別記事

2008-03-27
晴れ

内容が短いトラバを拒否するプラグイン

ゆりこ による 21:46:46 の投稿
カテゴリー: WordPressハック
タグ: ,

実は数日前、Yuriko.Net 旅行記 の WordPress インストールディレクトリーを /travel/ に戻しました。以前、/travel/ → /wordpress/ に変更したのですが、そうすると、スパムトラックバックが激減するというメリットがありました。しかし、WordPress コアやプラグインで、インストールディレクトリー (/wordpress/) と、ウェブログ URL (/travel/) が違う場合を考慮してない場合があって、そういうときは動作がおかしくなります。

また、テクノラティーは「http://www.yuriko.net/travel」という URL を探そうとしますが、サーバーが「http://www.yuriko.net/travel/」へのリダイレクトを返答しても、うまく認識していない (リファラーなどがうまくカウントされない) という問題もありました。

で、インストール先を /travel/ に戻すと、さっそくトラックバックスパムが多数来ました……。WordPress は、ウェブログの URL からトラックバック URL を簡単に推測できてしまうので、こういう問題が起きます。←間違い。wp-trackback.php を直叩きしてました (なので、インストール URL とウェブログ URL が同じ場合に攻撃されやすい)。

しかし、スパムの多くは概要 (excerpt) がめちゃめちゃ短い (ランダムな10数文字) ので、そういう場合を拒否するプラグインを作ってみました。これで退治できればいいな〜〜。ソースにある通り、ライセンスは GPL としますので、てけとうに使ってみてくらはい。

[追記] 以後3本の記事にも共通ですが、プラグインとして使うためには、新規テキストファイルを作成し、以下のコードをコピー&ペーストして、UTF-8 コード (BOM なし) で保存します。ファイル名は英数字なら何でも構いません。そして、wp-content/plugins/ にアップロードして、管理パネルで有効化すれば OK です。有効化時に Fatal Error になるときは、コピー&ペーストに失敗しています。どこかに不正な文字が入っていないか、ファイル先頭や末尾に余計な改行がないか、確認してください。

<?php /*
Plugin Name: Reject short trackbacks
Plugin URI: http://www.yuriko.net/arc/2008/03/27c
Description: Rejects short trackbacks to keep away from spams.
Author: IKEDA Yuriko
Version: 0.70
Author URI: http://www.yuriko.net/cat/wordpress
*/

/*  Copyright (c) 2008 yuriko

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

define ('TRACKBACK_EXCERPT_LENGTH', 32);

function reject_short_tb($commentdata) {
	if ($commentdata['comment_type'] != 'trackback') {
		return $commentdata;
	}
	$excerpt = preg_replace('|^<strong>.*?</strong>\s*|', '', $commentdata['comment_content']);
	if (strlen($excerpt) < TRACKBACK_EXCERPT_LENGTH) {
		trackback_response(1, 'We cannot accept your trackback.');
		exit;
	}
	return $commentdata;
}
add_filter('preprocess_comment', 'reject_short_tb'); ?>

[追記 2008-04-21] Akismet と併用すると、先に Akismet がスパムトラックバックを補足してしまい、本プラグインが効かないことが判明しました。末尾の add_filter部分を以下のように変更して、無理矢理 Akismet の優先順位を下げれば OK です。

add_filter('preprocess_comment', 'reject_short_tb', 1);
remove_action('preprocess_comment', 'akismet_auto_check_comment', 1);
add_action('preprocess_comment', 'akismet_auto_check_comment', 2);

[追記 2008-05-01] 修正版をリリースしました。上記のコードは使わないでください。

トラックバック・コメント »

  1. 【業務連絡】【WordPress】Re: 内容が短いトラバを拒否するプラグイン(From Yuriko.Net)

     先日、当ブログ内の記事「Re: [wordpress] Akismetを暇にする現状で最強のスパム対策(From Odysseygate.com)」のコメント欄において、ゆりこ氏よりトラック・バックスパムへの有効な対策につ…

    Telminaからのトラックバック

上に戻る

※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title="" ktai=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る