ホーム > Movable Type 関連 > コメントスパム対策 MTHash編

コメントスパム対策 MTHash編

2005 年 6 月 21 日 こてつ コメントをどうぞ コメント

さくらレンタルではサブドメインが設定できますのでサブドメイン取得しそちらで、もうひとつブログをはじめました。ちょっぴり使い分けたかったからです。


しかし、「コメント」の設定でつまづきました。
他のブログはコメントスパム対策に TypeKey を利用しています。しかし、サブドメインで完全に運用を行う場合サイン・イン後にコメント欄が出てきません。
ブログの設定で「アーカイブのURL」をメインのドメインのものにしてやるとちゃんとサイン・インできるのですが、それだと何の為のサブドメインか分かりません。。
コメントスパム対策は行っておきたいので色々探してみました。。てか、前に見つけていた、
MT-SCodeプラグインでスパム対策」 というエントリーからたどっていって、
スパム対策を強化(MTHash)
プレビューボタンのみ表示してhashを仕込むというコメントスパム対策
コメントスパム対策
そして「コメントスパム対策」 にたどり着いたわけです。
おおまかに言うと
●「プレビューにだけ認証キー(Hash)を仕込む」
●「仕込んでおいた認証キー(Hash)でコメント投稿可能にする」
このようなものです。。文字認証もかっこよさげですが、認証していることを感じさせない
この方法にしました。
ほぼ転記のようになってしまいますが自分の覚書として記載しておきます。
まず、MTHashをダウンロードしてMTの plugins ディレクトリーに入れておきます。
その際 salt.txt というのも同じところに作っておきます。salt.txt には適当な文字(半角英数字)を書いて入れておきます。
Forcing Comment Previews
/lib/MT/Template/Context.pm
if ($cookies && $cookies->{commenter_name} && $cookies->{commenter_name}->value()) {
$commenter_name = MT::I18N::encode_text($cookies->{commenter_name}->value(),'utf-8',undef);
}


if ($registration_allowed || $unregistered_allowed) {
$javascript = <<JAVASCRIPT;

の間に下記を追加。

require Digest::SHA1;
my $sha1 = Digest::SHA1->new;

$sha1->add( $entry_id . $ENV{'REMOTE_ADDR'} );

my $salt_file = MT::ConfigMgr->instance->PluginPath .'/salt.txt';
my $FH;
open($FH, $salt_file) or die "cannot open file ($!)";
$sha1->addfile($FH);
close $FH;

my $comment_validated = $sha1->b64digest . "=";

<p><label for="text"><MT_TRANS phrase="Comments:"></label> $allow_comment_html_note<br />
<textarea tabindex="4" name="text" rows="10" cols="50" id="text">$comment_text</textarea></p>


<div align="center">
<input type="submit" name="preview" value="&nbsp;<MT_TRANS phrase="Preview">&nbsp;" />
<input style="font-weight: bold;" type="submit" name="post" value="&nbsp;<MT_TRANS phrase="Post">&nbsp;" />
</div>

の間に下記を追加。

<input type="hidden" name="validated" value="$comment_validated" />

/lib/MT/App/Comment.pm
if (!$q->param('text')) {
return $app->handle_error($app->translate("Comment text is required."));
}


my ($comment, $commenter) = _make_comment($app, $entry);
の間に下記を追加。

require Digest::SHA1;
my $sha1 = Digest::SHA1->new;

$sha1->add( $entry_id . $ENV{'REMOTE_ADDR'} );
my $salt_file = MT::ConfigMgr->instance->PluginPath .'/salt.txt';
my $FH;
open($FH, $salt_file) or die "cannot open file ($!)";
$sha1->addfile($FH);
close $FH;

my $digest = $sha1->b64digest . "=";

if ($q->param('validated') ne $digest) {
return $app->handle_error($app->translate(
"Please preview your modified entry before posting it."));
}

「確認」をしないと「プレビューしてください」とエラーがでて投稿出来なくなっています。
それを確かめたら、「個別エントリーテンプレ」の「投稿」ボタンを消します。
ひとつのMTで2つのブログをやっていますのでこちらのブログは TypeKey + MTHash です。ガチガチ?!ですかね。

スポンサード リンク
 

 

Yahoo!ブックマークに登録 はてなブックマークに登録 Deliciousに登録 livedoorクリップに登録 Buzzurlに登録 mixiチェック Facebookにシェア ツイートする

  1. 2005 年 7 月 8 日 17:49 | #1

    スパム登録制限機能をYomi-Searchに

    またまた、PHP版ではなくてcgi版の改造。。改造といってもオフィシャルのサイト…

  2. 2006 年 8 月 12 日 16:03 | #2

    TypeKey IDは外して。。

    こちらのブログでエントリーするのもかなり久しぶり(照 っていうか、かなりほったら…

  1. トラックバックはまだありません。