2004年02月17日

ゴミTrackBack対策(1)

こっちでも書きましたがPukiWikiが流行っているおかげでBasic認証が掛かっているサイトからのTrackBackが増えてきました。

見に行けないサイトからのTrackBackなんてじゃまになることこそあれ、メリットなんて何も無いと思うのでMT側で制限を実装してみました。

MovableType Version 2.661 日本語化済 lib/MT/App/Trackback.pm の170行目辺りに次の青字の行を挿入
        if ($user_ip =~ /$banned_ip/ || $ENV{'REMOTE_HOST'} =~ /$banned_ip/) {
            return $app->_response(Error =>
              $app->translate("You are not allowed to send TrackBack pings."));
        }
    }

    ## Check if access to TrackBack sending site has been success.
    {
     my $ua = MT->new_ua;
     ## Wrap this in an eval in case some versions don't support it.
     eval { $ua->parse_head(0) };
     my $req = HTTP::Request->new(GET => $url);
     my $res = $ua->request($req);
     my $rcode = $res->code();
     unless( 200 <= $rcode && $rcode < 300){
      return $app->_response(Error =>
       $app->translate("TrackBack pings is permitted only from the site that everyone can access."));
     }
    }

    ## Check if user has pinged recently
    #my @past = MT::TBPing->load({ tb_id => $tb_id, ip => $host_ip });
    #if (@past) {
これで、閲覧したときにステータスコードが200番台以外のサイト(つまり正常に閲覧出来ないサイト)からのTrackBackを拒否するようになります。

なお、これだと転送URL等も弾いてしまうので、BASIC認証からのTrackBackのみを弾きたい場合は

unless( 200 <= $rcode && $rcode < 300){
if( 401 == $rcode){
に変更してください。

なお、TrackBackの改変が成功したかどうかの確認はDrifting Antigone Frontlineさんのところにある手動トラックバック用のJavaScriptをハードディスクに保存(下記サイトに書いてある<html>から</html>までをメモ帳に貼り付けて保存)してそれをブラウザで開いてテストすると便利です。

Posted by Takuchan at 2004年02月17日 12:27 | トラックバック(0)

私のところにも同様のPingが来るなと思っていたら、そんな理由だったのですね。それ以外にも何時の間にか無くなっているページもあったりして。ま、今のところ大した数ではありませんから手動で削除していますが、今後増えるようなことがあれば、こちらのハックの導入をさせていただきたく存じます。

Posted by: masato at 2004年03月02日 00:46