先日、当ブログ内の記事「Re: [wordpress] Akismetを暇にする現状で最強のスパム対策(From Odysseygate.com)」のコメント欄において、ゆりこ氏よりトラック・バックスパムへの有効な対策についてご教示いただきましたので、遅ればせながらこのブログにも適用してみました。
- 関連記事
- 内容が短いトラバを拒否するプラグイン @ Yuriko.Net
先方で述べられている、
概要 (excerpt) がめちゃめちゃ短い (ランダムな10数文字)
というたぐいのスパムですが、当ブログにも時々やってきます。
一応、スパム対策は多重におこなっておりますのでとりあえず表面にはでていませんが、データベースにスパム情報が記録されたりスパムが来た旨がいちいちメールで告知されたりするのもうっとうしいわけです。
かといって、来たスパムを「承認待ち」状態ではなくいきなり削除したりすると、もし万が一たまたまスパムっぽいが真っ当なトラック・バックが来たときに困ったことがおきます。場合によってはすみませんでは済みません(苦笑)。
というわけで、「100%確実にスパムとわかるケース」については門前払いするという、今回ご紹介いただいた方法を、当ブログでも取ることにいたしました。
とは言いましても、先方で紹介されているコードそのままですと、ちょっと困ったことがおきます。
可能性はきわめて低いとはいえ、真っ当な日本語のトラック・バックもはじいてしまう可能性があります。
そこで、私はご紹介のコードに一部手を加えて使うことにいたしました。
オリジナルは先方の記事をご覧いただくとして、その中の33行目
if (strlen($excerpt) < TRACKBACK_EXCERPT_LENGTH) {を、次の1行で置き換えました。
if (preg_match("/^[ \w\.\!\?\-]{0, “. TRACKBACK_EXCERPT_LENGTH .”}$/”, $excerpt) > 0) {
要は、トラック・バックの概要が、定数「TRACKBACK_EXCERPT_LENGTH」で指定された文字数以下の、英数字やいかにも英文で使われそうな一部記号と半角スペースのみで構成されている場合にエラーを出してお引き取り願うという挙動に変更したというものです。
たぶん大丈夫だとは思いますが、まだ自分のところにアップしたばっかりであり、一度もテストしておりません(爆)。
もし今後、当ブログに対して送っていただいたトラック・バックがいつまでたっても反映されないという事態が起こったとすれば、このプラグインが想定外の動作をしてしまっているかもしれません。
その可能性が疑われる場合は、恐れ入りますがその旨を当記事のコメント欄にてご報告いただければと思います。
…どうかちゃんと動きますように。










5個のコメント
bbcode や HTML タグを含むときにすり抜けてしまいそうですよ
角カッコと山カッコも禁止対象にした方がいいですが、思いきって
preg_match('/^[\x20-\x7f]….とするか、もしくは
if (strlen($excerpt) < TRACKBACK_EXCERPT_LENGTH && ! preg_match('/[\x80-\xfe]/’, $excerpt)) {の方がすっきりするでしょうか。
はっしまった!
ランダムな連続文字とくだらないショート・メッセージのことしか頭にありませんでした!
HTMLやbbcode、使い方によっては十分埋められる可能性がありますね。
ご提示いただいた中では後者のほうが目的に近そうですので、そちらを使わせていただきます。
ありがとうございました。
朝起きて、「Simple Trackback Validator」のログを調べたら1件明らかにスパムとわかるトラック・バックがこのプラグインによって承認された形跡があったのですが、当該トラック・バック、ブログ内のどこを探しても見あたりません。
どうやら、今回導入したプラグインの改造版がちゃんと動いていると判断して良さそうですね。
…一応ログとか取った方がいいのかも?
Simple Trackback Validator の動作は知りませんが、わたしのプラグインは、短いトラックバックを受け取らずにエラーコードを返すという仕組みです。確かに、エラーコードを返したログを残してみるのは興味深いかもしれません。
本日、Akismet にスパム判定された短いトラックバックがあったので、調べてみたところ、Akismet と同時に使用すると、Akismet が先にスパム判定してしまうようです
add_action('preprocess_comment', 'akismet_auto_check_comment', 1);なんてなってますので、拙作プラグインより先に動作しちゃいます。
となると、無理矢理 Akismet の akismet_auto_check_comment() アクションの優先順序を下げて、拙作プラグインによる判定を先に行なわせるようにした方がよさそうです。
とはいえ、データベースなんかに書き込もうとするとヘヴィーになりますね。
ただでさえ、ここ「Telmina」は勤務先の一部からは「重い」ともっぱらの評判らしいので(自爆)。
Akismet、優先度マックスですか。プラグインの性格からしてそうしたい気持ちはわからなくもない(笑)。
なお、ここ「Telmina」ではAkismetは使用していません。
ちなみに、「Simple Trackback Validator」では、
add_filter('preprocess_comment', 'stbv_main', 1, 1);と書かれていますね。やっぱり優先度マックス。
2個のトラックバック/ピンバック
短いトラバを拒否するプラグイン Reject short trackbacks 0.72
以前公開した、「内容が短いトラバを拒否するプラグイン」ですが、細かい問題点が見付かりましたので、修正版を公開いたします。
Akismet をインストールしていると、Akismet によるスパ…
短いコメントの拒否プラグイン Reject short comments 0.8.0
以前公開した、「内容が短いトラバを拒否するプラグイン」ですが、コメントスパムにも対応させました。名前も「Reject short comments」に変更しています。
トラックバックの拒否バイト数…
コメントを書く