MT4iにSpam Protect

うーん。コメント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叩いてるんだろうなあ。