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のブロックにはもちろんなると思います。