spamTB対策強化+リファラチェックテスト

前回のバグ修正で今まで蹴られてたspam TBがすり抜けるようになったのでQuasi Spam Filter Pluginを強化。

今回の実装内容
・ASCII文字オンリーとそれ以外での文字数制限(最低限の長さ)の区別 => ok
 ASCII文字オンリーはspamの可能性が高いが、だからといって全面的に蹴るのはどうも私は好かない。
 そこで、明らかにspamであると思われる、異様に短いものを蹴るようにしていたが、その長さをさらに厳しくした。
 日本語についてはspamでない可能性が高いので、ASCII文字オンリーより少し短くても非spamとみなすようにした。
 ってかもともと文字数制限自体オリジナルになかったはず。
・バッドワード追加 => ok
 普通のTBにはまず含まれないであろうf*ckなどの卑猥な語を数個追加。
・要約とタイトルが同じものを蹴る => ok
 普通のTBではまずありえない。大抵はタイトル=TB元のエントリ名なので。
・要約とブログ名が同じものを蹴る => ok
 これも普通のTBではまずありえない。だが、spamTBではこういうのががんがんくる。

将来的に予定してること
・バッドIPリスト
 TBPingDSBLがあれば不要か?
・バッドワードリストなどのブラックリストの外部ファイル化
 これはやっておきたいかな。追加を容易にするためにも。
・ベイズフィルタ??
 難しいので、仮に導入するとしても多分どこかから完成品持ってくると思う。

あと、リファラチェック導入テストを行った。

TBpingDSBLをベースに中身を書き換えて雛型作成。
とりあえずリファラチェック部分は必ず成功or失敗するようにして動作テスト。
しかし、$app->_responseでエラーメッセージを設定すると二重にセットされてしまう。
どうやらTBPingFilterを使うと、MT自体がメッセージをセットしてしまうので二重になるらしい。
そこで、小粋空間: 重複トラックバック防止プラグインの「3.その他」を見て、TBPingFilter時でもプラグイン内でエラーコードやエラーメッセージを設定できるようにした。

リファラチェックの本体はアクセス解析CGIで使っているリファラチェックを流用。
MT::Trackback、MT::Entry、MT::Blogのloadを駆使してTB先URLを取得し、TB元URLのソースをHTTP GETしてその中にTB先URLが含まれているかチェック。
しかし、なぜかValidate.pmでエラーが出るようになったのでValidateXS⇒ValidatePPに無理矢理変更(MTディレクトリ以下のextlib/Params/Validate.pmを書き換え)。
どうやら速度が若干落ちる(処理時間8割増?)らしいが、まあいいや(ぉ)。

しかし、ただでさえTBが少ないので、多少宣伝的でもできるだけTBを受け入れたい。
そこで、リファラチェックはしばらく封印しておくことにした。