2008年10月09日(木) 15:43

SPAM対策にAntibotプラグイン

Movable Type4のプラグインを勉強してまして、昔MT3向けに作ったのをMT4向けに書き直してみました。
スパム対策、スパム予防を目的としたプラグインです。


Antibotプラグイン

元ネタは手前ミソのMT3向けプラグインです。

トラックバックスパムの大半は、ロボットで自動的にトラックバックURLを収集して、自動的に送信しているのであろうと思う。
なので、トラックバックを弾く以前に、そもそも送信されないための予防対策ってのもあっていいんではないかと。
送信される数が減れば、弾く処理も減って、サーバ負荷も減りますからね。
というわけで、ロボットにトラックバックURLを発見されにくくするための doEntity プラグイン


今回作った Antibotプラグインも機能は doentity と同じで、ブログページのテキストを bot に解釈されにくくします。詳細は後述しますが、グローバルモディファイアとブロックタグを実装しているので、トラックバックURLの出力以外にも幅広く利用できるようになっています。
実は、doentityを書いた時は数値参照文字を実体参照文字だと誤認していたり、プラグインの設定をソース編集にしてしまったりしていたので、今回、renameして根本的に書き直した次第です(Perlも随分勉強したし)。


ダウンロード

Antibotプラグインのダウンロードはここをクリック


ダウンロードしたファイルは解凍して、/Antibot/ ディレクトリごと ~MT/plugins/ に設置してください。
パーミッションの変更などは不要です。


~MT/plugins/--/Antibot/-+- Antibot.pl
                        |
                        +-/lib/---/Antibot/-+- L10N.pm
                                            |
                                            +-/L10N/-+- en_us.pm
                                                        ja.pm


システムメニューのプラグインに Antibot がリストされていれば正しく設置できています。
ほとんどデフォルト設定で問題ないとは思いますが、各ブログの ツール>プラグイン メニューで Antibot の設定変更が可能です。


Antobot の使い方

主に、mt-tb.cgi や mt-comments.cgi のURLを出力する際に利用されることを想定しています。


グローバル・モディファイアとして利用する場合:antibot属性>


文字列を吐き出すMTタグに antibot="1" という属性を追加して機能させます。

<$mt:EntryTrackbackLink antibot="1"$>


通常なら「 http://www.example.com/mt/mt-tb.cgi/2 」などのURLになるところが、

&#x68;&#116;&#x74;&#x70;&#58;&#47;&#x2f;w&#x77;&#x77;.&#101;&#x78;&#x61;mpl&#101;&#x2e;co&#x6d;/mt&#47;mt-t&#x62;.&#99;g&#x69;&#47;2

ってな感じに変換されて出力されます。


もちろん、ブラウザの表示上は何も変わりません。HTMLソースで数値参照文字になっているだけです。


Antibotプラグインを使用した上で、mt-tb.cgi や mt-comments.cgi を変名して利用(mt-config.cgi で設定)すると、少なからずスパム予防に効果があるでしょう(ゼロになるかと言えばそれは難しいかもしれませんが)。


裏技として、antibot="2" とすると、JavaScript による出力も織りまぜられ、さらにHTMLソースが複雑化します。
ただし、HTMLの属性値などに JavaScript による出力がまざると、HTMLが崩れますのでご注意ください。
また、antibot="1" でも JavaScript による出力を有効にするには、ブログごとのプラグイン設定で変更してください。


ブロックタグとして利用する場合:MTAntibotタグ>


効果は同じですが、以下のようにブロックタグとしても利用できます。

<mt:Antibot><$mt:BlogName$></mt:Antibot>


HTMLタグは基本的に変換しないように処理しますが、もれることもあるかと思います。また、もともとの数値参照文字や実体参照文字が1文字ずつ数値参照文字に変換されてしまうので、そうした文字を含む文字列に適用しないように注意してください。


最後に

残念ながら、ダイナミックパブリッシングには未対応です。
また、ブログの運用文字コードがUTF-8以外だと化けるかもしれません(レポート下さるとうれしいです)。
さらに、MT3.Xでは動作しません。


すいませんすいません。

でも、MT4.X には是非、使ってみてください(´ー`)

あなたのコメントをお待ちしています。

名前  クッキーに保存 
このエントリーへのコメント(7件)

perl版ダイナミックパブリッシングでも良いので、なんとか4.24で動くようにならないでしょうか。
現在、プラグインのロードに失敗していてエラーログの嵐です。
もし、お手すきの時にでもちょこっと修正して頂けるとても嬉しいです。

>panさん

ロードに失敗するのはダイナミックパブリッシングの場合でしょうか?
ダイナミックパブリッシングじゃない場合でもダメですか?
(4.24は何か変更あったんですかね。最近MT追いかけていないので。。。)

説明が簡素すぎました。
プラグイン設定の設定画面で、ロードに失敗しましたとなってます。
ですので静的/動的問わず、プラグインが有効にならないのです。
もし、お手すきな時があれば、ちょこっと見ていただけると嬉しいです。
更にあつかましい要望ですが、4.25への対応も考えて頂けると私的に幸せになれます。
毎日数百件以上のスパムに悩まされていますので、気を長くして待つことにします。

>panさん
versionモジュールの利用がまずいのでしょうか。
とりあえずはずしてアーカイブを更新してみました。
1.0.1をお試しください。

ありがとうございます。
無事にロードすることができ、トラックバックの文字列がヘキサ表現になっている事が確認できました。
何か私一人のためだけに対応して頂いた様な感じで、恐縮です。
最後に、素晴らしいプラグインを作成して頂いてありがとうございます

>panさん
無事動いて良かったです。versionモジュールは意外にインストールされてないんですね。知らなかったので助かりました。
こちらこそありがとうございます。
ちなみに、
http://tech.bayashi.jp/archives/entry/movabletype-plugin/2006/001327.html
こちらも参照してプラグイン以外の部分を対策したほうが良いかと思います。では。

アドバイスありがとうございます。
設置後、まったくスパムトラックバックが無くなりました。
これでもすり抜けてくるようになたら、対策の方もやりたいと思います。

エントリーナビ
SPAM対策にAntibotプラグイン」は、
MTプラグイン(4.X) カテゴリーの記事です。


関連エントリー
はてなid記法をMovable Type4.Xで実装するプラグイン
任意の位置と長さの文字列を取り出すsubstrプラグイン
Movable Typeで和音画像を表示するプラグイン(音もでるよ)
Movable Typeを愛でつつむ LOVEプラグイン
簡単!Movable Type3テンプレートのモジュール管理

トラックバック
このエントリーへトラックバックするURL (言及リンクのないトラックバックは無効です)