Trackback の脆弱性用パッチ
blog.bulknews.netさんがTrackback
の脆弱性についての勧告を出している。
TrackBack Pingを JavaScript を使用して送ることができるので、それがSPAMやDDoSとして使われることがあると、いうことらしい。
Movable TypeのVersion 2.661のPatchが上記サイトになかったので書いてみた。
--- lib/MT/App/Trackback.pm.old Fri Jun 18 22:23:00 2004 +++ lib/MT/App/Trackback.pm Fri Aug 6 18:43:59 2004 @@ -112,6 +112,17 @@ sub ping { my $app = shift; my $q = $app->{query}; + + if($ENV{MOD_PERL}){ + if($q->headers_in->{'Referer'} or ($q->headers_in->{'User-Agent'} || '') =~ m!^Mozilla/!){ + return $app->_response(Error => "Trackback ping with invalid headers: denied."); + } + }else{ + if($q->referer or ($q->user_agent || '') =~ m!^Mozilla/!){ + return $app->_response(Error => "Trackback ping with invalid headers: denied."); + } + } + my($tb_id, $pass) = $app->_get_params; return $app->_response(Error => $app->translate("Need a TrackBack ID (tb_id)."))
と、これを作っていたら、k-MTさんに先こされた(笑
しかも、get_headerメソッドを書いてしまうこのやり方の方がスマートでした。
このPatchをつくるのに、Apache拡張ガイド〈上〉サーバサイドプログラミング、Apache拡張ガイド〈下〉APIリファレンスを引っぱりだしてしまいました。
でも、CGI(または動的生成コンテンツ)である以上、ユーザ1人がEnterキー→BackSpaceキー→Enterキーでフォームの登録をすればサーバは死んでしまうのですね。昔、運営しているサイトでしばしばありました。
このときは、サイトの性格上のものであったので、ルールを変えることで、連続したフォームの書き込みをする意味をなくしました。
TrackBackではそういうことではないので、Apache側での簡単な防御策があれば良いのですが。
SPAMのブロックにはもちろんなると思います。