コメントSPAMがかなりひどくIPベース制限では効かなくなってきたので、URLベースではじくように改良。
一部の方に好評なようなのでさらに Hack。blacklist ファイルを Comment 通知メールから更新できるようにしてみます。
以下のような mt-blacklist-append.cgi ファイルを mt.cgi とおなじとこにおきます。$blacklist
は blacklist ファイルの絶対パス、$password
は適当に決めてください。
#!/usr/local/bin/perl -w use strict; use CGI; use FileHandle; my $blacklist = "/path/to/blacklist"; my $password = "blahblah"; do_task(CGI->new); sub do_task { my $q = shift; $q->param('password') eq $password or return show_error($q, "Password mismatch"); my $out = FileHandle->new(">>$blacklist") or return show_erorr($q, "$blacklist: $!"); $out->print($q->param('url'), "\n"); $out->close; print $q->header, "Blacklist appended successfully."; } sub show_error { my($q, $msg) = @_; print $q->header, "Error: $msg"; }
このファイルに url ってパラメータをつけることで blacklist ファイルへの追記をおこないます。次に MT/App/Comments.pm の 120行目ぐらい。MT::Mail でメールをおくってるところのメール本文をこういう風に書き換えます。
MT::Mail->send(\%head, <<BODY); A new comment has been posted on your blog @{[ $blog->name ]}, on entry #@{[ $entry->id ]} (@{[ $entry->title ]}). $link_url IP Address: @{[ $comment->ip ]} Name: @{[ $comment->author ]} Email Address: @{[ $comment->email ]} URL: @{[ $comment->url ]} Comments: @{[ $comment->text ]} Blacklist this URL? @{[ $app->base . $app->path . "mt-blacklist-append.cgi?password=blahblah&url=" . MT::Util::encode_url($comment->url) ]} BODY
password のとこは、さっき mt-blacklist-append.cgi に指定したやつをいれときます。
これで、Comment 通知のときに来るメールに、
Blacklist this URL?
http://blog.bulknews.net/mt/mt-blacklist-append.cgi?password=blahblah&url=http://.......
ってな具合のリンクがつくので、SPAM くらったらこれをワンクリックで、blacklist ファイルが更新できます。blacklist ファイルの permission は 666 あたりにしておく必要があります。
こういう Hack をしてると、MT をアップグレードするのがめんどくさくなるので、素人にはオススメできない。