コメントSPAM対策はこれで一応完了にしようかって感じで、MT-SCODEを入れてみた。これは、画面にランダムなコードを画像で表示し、このコードを入力してもらい一致しないと投稿出来ないようにするプラグインです。Yahoo! JAPAN のID登録でも使われている仕組みですね。 画像でコードが表示されるので画面で見ない限り正確な入力が出来ない事になるから、プログラムで自動投稿ってことはほぼ不可能になります。
ここでは、Debian+MT3.15-jaを前提にしています。
libgd-perlのインストール
- libgd-perl がインストールされているかチェックします。
# dpkg -l | grep libgd-perl
インストールされていない場合は、インストール。
# apt-get install libgd-perl
MT-SCODEのインストール
- scode-0.1c.tar.gz を /tmp へダウンロードします。
# wget http://james.seng.cc/files/scode-0.1c.tar.gz
- scode-0.1c.tar.gz を解凍します。
# tar zxvf scode-0.1c.tar.gz
- SCode.pm の修正
作業用ディレクトリと、セキュリティコードの桁数を指定します。my $tmpdir = “/tmp/”;
my $scode_length = 6;
- SCode.pm を MTインストール先/lib/MT/ へ移動する。
- mt-scode.cgi、scodetest.cgi を MTインストール先 へ移動して、権限(755等に)を変更する。
- scode.pl を MTインストール先/plugins/ へ移動する。
http://host.domain/mt_home/scodetest.cgi
を実行してみて下さい。
全てOKと出力されれば環境は整っています。
Comments.pm ソースの修正
MTインストール先/lib/MT/App/Comments.pm で、下記の部分を検索してください。
if (!$q->param(‘text’)) {
return $app->handle_error($app->translate(“Comment text is required.”));
}
この直後へ下記内容を追加してください。
# SecurityCode hack start
#
require MT::SCode;
my $code = $q->param(‘code’);
my $scode = $q->param(‘scode’);
my $sscode = MT::SCode::scode_get($code);
if ($scode ne $sscode) {
return $app->handle_error($app->translate(
“Wrong or missing Security Code.”));
}
MT::SCode::scode_delete($code);
MT::SCode::scode_create($code);
#
# Security hack ends
Context.pm ソースの修正
当方のMTでは、コメント部をテンプレート化しているので、テンプレートの修正を行う。基本的には同じような箇所の変更になるので通常通り Context.pm への修正を行う方法をあげておきます。
MTインストール先/lib/MT/Template/Context.pm のサブルーチン _hdlr_comment_fields へ変更を加えます。
sub _hdlr_comment_fields {
my ($ctx, $args, $cond) = @_;
….
..
my ($ctx, $args, $cond) = @_;の次の行へ下記内容を追加します。
# Security code validation
require MT::SCode; # <-- new addition srand int (time/10)+$$; my $securitycode = int rand(MT::SCode::scode_tmp()); $securitycode++; MT::SCode::scode_create($securitycode); # End Security code hack
次に、<MT_TRANS phrase=”Remember me?”>を検索してください。下記のようなところが2ヶ所見つかるはずです。
..
….
<MT_TRANS phrase=”Remember me?”>
<input type=”radio” id=”remember” name=”bakecookie” />….
..
….
コメント入力用の<textarea>の次の行へ下記内容を追加してください。
<!– Security Code Check –>
<input type=”hidden” id=”code” name=”code” value=”$securitycode” />
<label for=”scode”>Security Code:</label><br />
<img border=”0″ alt=”Please enter the security code you see here” src=”$path/mt-scode.cgi?code=$securitycode” /><br />
<input tabindex=”3″ id=”scode” name=”scode” /><br /><br />
<!– end of Security Code Check –>
テンプレート化している場合は、下記を追加してください。
<!– Security Code Check –>
<input type=”hidden” id=”code” name=”code” value=”<$MTSecurityCode$>” />
<label for=”scode”>Security Code:</label><br />
<img border=”0″ src=”<$MTCGIPath$><$MTSecurityImage$>?code=<$MTSecurityCode$>”><br />
<input tabindex=3 id=”scode” name=”scode” /><br /><br />
<!– end of Security Code Check –>
ja.pm ソースの修正
MTインストール先/lib/MT/L10N/ja.pm で、下記の部分を検索してください。
## lib/MT/App/Comments.pm
..
….
..
## lib/MT/App/NotifyList.pm
## lib/MT/App/NotifyList.pm の上へ下記内容を追加してください。
‘Wrong or missing Security Code.’ => ‘セキュリティコードが未入力、又は間違っています。’,
以上で完了です。
あとは、画像表示の確認と未入力や、間違ったコードを入力してテストしてください。
コメントのテストです。
コメントテスト階層2