前回のバグ修正で今まで蹴られてた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を受け入れたい。
そこで、リファラチェックはしばらく封印しておくことにした。