おのたく日記 YouTubeも始めました→
2005-03-16(Wed) [長年日記]
■ [MovableType] トラックバックスパム対策
2004年7月10日の日記では、MovableTypeにコメントSPAMについて書いたけど、最近はコメントだけではなくて、トラックバックにもスパムがくるようになったので対策方法を調査した。
■ どのエントリーにpingされたのか分からない!! - 対策失敗
メイルでpingのお知らせはくるけど、MovableTypeのmenu画面では、どのエントリーにpingされたのか分からなくて困るので、以下のような対策を考えたが失敗してしまった。
失敗した作戦は、menu.tmplにコメントスパムの対応と同様に
<TMPL_IF NAME=HAS_EDIT_ACCESS><a class="list" href="<TMPL_VAR NAME=SCRIPT_URL>?__mode=view&_type=entry&id=<TMPL_VAR NAME=ENTRY_ID>&blog_id=<TMPL_VAR NAME=ENTRY_BLOG_ID>"><TMPL_VAR NAME=PING_CREATED_ON></a><TMPL_ELSE><font class="title"><TMPL_VAR NAME=PING_CREATED_ON></font></TMPL_IF>
なんていれたらすぐに、「最近 5つの Ping」で、どのエントリーにpingされているのか分かって便利かとおもってやってみた。
しかし、PING_LOOP中では、ENTRY_IDが取れないのでダメ
■ とりあえずいままでにpingされたものだけでも削除!!
いろいろ調べたけど、とりあえず、いままでにpingされたものを削除するには、コメントスパムの時と同じでDBの中で削除するのが良いらしい。
参考SQL文
delete from mt_tbping WHERE tbping_blog_name like '%poker%' or tbping_blog_name like '%texas%' or tbping_source_url like '%poker%' or tbping_source_url like '%texas%' ;
[F's Garage:MT TrackBackスパムを消すより引用]
で削除できるらしいので、まず
select * from mt_tbping WHERE tbping_blog_name like '%poker%' or tbping_blog_name like '%texas%' or tbping_source_url like '%poker%' or tbping_source_url like '%texas%';
で確認してから削除した。
■ 「ベイジアンフィルタ for MovableType」を使ってみる。
spamsssianと同じようなベイジアンフィルタをMovableTypeでも実現してくれているひつがいるので、早速使ってみる。
日本語解説: KANWAKYUDAI::Blog:ベイジテンフィルタ for MovableType
てもとのMovableType 2.64 + PostgreSQLにインストールしようとしたら色々問題が有った。
■tinyintなんて無い!!
Documentのとおりに進むとbayesian-init-db.cgiの実行のところで、PostgreSQLに「"tinyint"なんて知らない」と言われるので、bdb/bayesian_postgres.dumpのtinyintをsmallintに変えて実行
※mysqlでの1byte intがtinyintらしいが、手元のPostgreSQLでは無いらしいのでSQL92にもある2byte intのsmallintで代用させた。
■PostgreSQL用のTable dumpが間違い
bayesian-init-db.cgiの実行で利用するbayesian_postgres.dumpでは二つのテーブルを作った後にインデックスをつけているけどテーブル名が間違っていたので修正
誤: create index bayesianblog_blog_id on bayesian (bayesianblog_blog_id);
正: create index bayesianblog_blog_id on bayesianblog (bayesianblog_blog_id);
さらに最後のテーブルのインデックス作成でも、同様の間違いがあるので訂正
誤: create index bayesiantoken_blog_id on bayesian (bayesiantoken_blog_id);
正: create index bayesiantoken_blog_id on bayesiantoken (bayesiantoken_blog_id);
ここまで一度bayesian-init-db.cgiを実行しているとテーブルはできてしまっているので、psqlで
drop table bayesian; drop table bayesianblog;drop table bayesiantoken; drop sequence bayesian_id; drop sequence bayesianblog_id; drop sequence bayesiantoken_id;
を走らせて、テーブルとシーケンスを消してから再度トライの必要がある。
■なんとかDBスキーマ完成
mt-bayesian.cgiで
Loading database schema...
Done loading bayesian data into the database! All went well.
が出たので、なんとかDBは完成したみたい。
でもTRAINしても[Spam Probability: 50%]から変わらない何故?
そういえば、DBに作ったテーブルにも何も更新が入ってない
で、さらにDBのテーブルをDROPしてもエラー無し (;_;) うごいて無いじゃん!
「ベイジアンフィルタ for MovableType」PostgreSQL用のTable dumpが間違いPart23月16日の日記の「ベイジアンフィルタ for MovableType」を使ってみる。で見つけていた、PostgreSQL用のTable dump間違えが、まだまだ有った。 「うごいて無いじゃん!」ってかんじだったけ..
|