DDoS 的な JavaScript のアタックをはじきつつ、blosxom の Ping flavour とかから送信される(正当な?)リファラつき Trackback を確認画面を1枚はさんで受け付けられるようにしてみました。(なんか深追いっぽいですがこれが Blog ツール側のデフォルトになればよいのかも)
mod_rewrite のほうでは以下のように設定。Mozilla はじきはやめて、blog.bulknews.net 以外の Referer をはじくようにして、飛ばし先を Forbidden でなくて /mt/tb-pass.cgi としました。
# for Trackabck SPAM RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} mt-tb\.cgi RewriteCond %{HTTP_REFERER} .+ RewriteCond %{HTTP_REFERER} !http://blog\.bulknews\.net.* RewriteRule (.*) /path/to/mt/tb-pass.cgi [L]
tb-pass.cgi では、パラメータを受け取って、確認画面にて再度フォームを表示。blog.bulknews.net のリファラは受け取れるようになっているので、ここで再度 submit すれば Trackback Ping が送信できます。mod_rewrite ではじいたもともとの Ping URI は環境変数 SCRIPT_URI で取得。なんだか無駄に長いですが。。
use strict; use CGI; use Jcode; my $q = CGI->new; my @params = qw(title blog_name excerpt url charset); my $ping_url = $ENV{SCRIPT_URI}; if ($ping_url =~ /tb-pass\.cgi/) { # Direct Access print $q->header, "Forbidden"; exit; } my $charset = $q->param('charset'); $q->param(charset => "utf-8"); for my $p (@params) { my $v = get_value($q, $p, $charset) or next; $q->param($p => $v); # set } print $q->header('text/html; charset=utf-8'), "<html><head><title>Trackback Confirmation</title></head>", "<body>Really send this Ping? (Sorry, this confirmation is for anti-spam)\n", $q->start_form(-action => $ping_url, -method => "POST"); for my $p (@params) { defined($q->param($p)) or next; print $q->hidden(-name => $p); } print $q->submit(-value => "OK"), $q->end_form; sub get_value { my($q, $p, $charset) = @_; my $v = $q->param($p); defined($v) or return; my $code; if ($charset) { my %code = ( "euc-jp" => "euc", "shift_jis" => "sjis", "utf-8" => "utf8", ); $code = $code{lc($charset)}; } else { $code = Jcode::getcode($v); } return Jcode->new($v, $code)->utf8; }
掲示板に貼られているボタンを押してしまうような人は、もう一回押してしまうかも。。。
Lieber grumble!!! hoffe dir gehts gut da in der fremden weite... wenn man dich schon nicht persnlich besuchen kann...
Wann machma denn die nchste party??? lebe lang und erfolgreich!!! :)