Yuriko.Net 個別記事

内容が短いトラバを拒否するプラグイン
実は数日前、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] 修正版をリリースしました。上記のコードは使わないでください。
【業務連絡】【WordPress】Re: 内容が短いトラバを拒否するプラグイン(From Yuriko.Net)
先日、当ブログ内の記事「Re: [wordpress] Akismetを暇にする現状で最強のスパム対策(From Odysseygate.com)」のコメント欄において、ゆりこ氏よりトラック・バックスパムへの有効な対策につ…