うーん。コメントSPAMを浴びた…。
私のMovableTypeに組み込んであるコメントスパム対策のSpam Protectは実装が単純なので、狙われれば弱いかもしれないけど、規格化された方法ではないので、こんなのを破ってるヒマがあったらもっと…。
と思った時点で気になったのが、MT4iのコメントスパム対策。
実質的に対策されてないんじゃ…
と思ってMT4iにも同様のロジックを組み込んでみることにした。
mt4i.cgiのソースで
227行付近、
my $post_text = $q->param("text"); # コメント
my $post_spamprotect = $q->param("spamprotect"); # スパムプロテクト
# PerlMagick の有無調査
my $imk = 0;
を挿入。
1093行付近、sub postform 内
$data .= "<input type=hidden name=eid value=$eid>";を挿入。
$data .= "<input type=checkbox name=spamprotect>投稿前にチェックしてください";
$data .= "<input type=submit value='送信'>";
1137行付近、sub post 内
####################
# admin_helperをチェック
#if ($admin_helper){
#
# my @admin_data = split(/,/,$admin_helper);
#
# if ($post_from eq $admin_data[0]){
# $post_from = $admin_data[1];
# $post_mail = $admin_data[2];
# }
#}
if(!$post_spamprotect)
{
$data .="Error!<br>Spam Protectが作動しました。<br>";
my $href = &make_href("postform", $rowid, 0, $eid, 0);
$data .="$nostr[0]<a href='$href'$akstr[0]>戻る</a>";
&errorout;
return;
}
####################
# 必須入力項目をチェック
# 名前,mail,textのどれも入力が無ければエラー
を挿入。
これにより、MT4iでも、Spam Protectチェックボックスをチェックしていないとコメントが投稿できない、はず…。
最後の部分は、このあとにつづく必須入力項目をチェックをまるまるコピーして、条件文とエラーメッセージだけ書き換えました。
と思ったけど、改良後もフツーにコメントスパムが入っている。
やっぱ、違うインターフェースからやられてるんだな。
直接MTのAPI叩いてるんだろうなあ。