SCode プラグインでコメントスパムを制限する(その2:Typekeyサイン・インとの競合制御)
その1:基本設定ではプラグインの導入によってコメントフォームにセキュリティコードが表示されるようになりましたが、Typekey 認証を利用している場合、左のスクリーンショットのようにサイン・イン後もセキュリティコードの入力が要求されます。これは過度なセキュリティであり、ユーザビリティ上も好ましくありません。 |
ということで、ご質問を頂きましたので、本エントリーでは Typekey サイン・イン状態の場合、セキュリティコードの入力欄を非表示にし(左図)、チェック機能を無効にするカスタマイズを紹介します。 3.1x 時代に MT-SCode を紹介した時に同じカスタマイズを行っていたのですが、質問を頂いて思い出しました。全く忘却の彼方でした。すいません。 |
以下、カスタマイズ方法です。注:カスタマイズは、その1:基本設定で SCode プラグインの設定が完了していることが前提となります。
1.テンプレートの修正
管理メニューより個別エントリーアーカイブテンプレートを開き、前回の4項で追加したセキュリティコード表示部分に対して、青色で示す id 属性および JavaScript を追加します。この追加によりサイン・イン状態を判定して、サイン・イン状態であればセキュリティコード入力エリアを表示しないようになります。
<p id="securitycode">
<label for="scode">Security Code:</label>
<input type="hidden" id="code" name="code" value="<$MTSecurityCode$>" />
<img class="scode" src="<$MTCGIPath$><$MTSecurityImage$>?code=<$MTSecurityCode$>" /><input id="scode" name="scode" />
</p>
<MTIfNonEmpty tag="MTTypeKeyToken">
<script type="text/javascript">
<!--
if (commenter_name) {
document.getElementById('securitycode').style.display = 'none';
}
// -->
</script>
</MTIfNonEmpty>
コメント・プレビュー画面やコメント・エラー画面にコメントフォームを表示し、SCode を適用している場合、同様の修正を行ってください。
2.プラグイン の修正
1項の作業は画面上セキュリティコードを非表示にするだけなので、これでコメントを投稿するとセキュリティコードが入力されていない状態と同じです。
ということで、cookie に保持されているサイン・イン状態を取得・判定して、サイン・インされていればセキュリティコードチェックを実施しない処理を追加します。
アップロードした SCode プラグインのディレクトリにある plugins/SCode/SCode.pl をダウンロードし、下記のパッチ、
--- SCode.pl.bak Wed May 31 01:40:56 2006
+++ SCode.pl Wed May 31 01:42:15 2006
@@ -174,11 +174,20 @@
my $scode = $q->param('scode');
my $sscode = SCode::scode_get($code);
- if ($scode ne $sscode) {
+ my $class = $ENV{MOD_PERL} ? 'Apache::Cookie' : 'CGI::Cookie';
+ eval "use $class;";
+ my $cookies = $class->fetch;
+ my $commenter_name = "";
+ if ($cookies && $cookies->{commenter_name} && $cookies->{commenter_name}->value()) {
+ $commenter_name = MT::I18N::encode_text($cookies->{commenter_name}->value(),'utf-8',undef);
+ }
+ if (!$commenter_name) {
+ if ($scode ne $sscode) {
my $score = -3;
my $msg = "Comment junked due to incorrect code entered";
return ($score, [$msg]);
- }
+ }
+ }
SCode::scode_delete($code);
SCode::scode_create($code);
}
@@ -196,8 +205,18 @@
my $code = $q->param('code');
my $scode = $q->param('scode');
my $sscode = SCode::scode_get($code);
- if ($scode ne $sscode) {
- return 0;
+
+ my $class = $ENV{MOD_PERL} ? 'Apache::Cookie' : 'CGI::Cookie';
+ eval "use $class;";
+ my $cookies = $class->fetch;
+ my $commenter_name = "";
+ if ($cookies && $cookies->{commenter_name} && $cookies->{commenter_name}->value()) {
+ $commenter_name = MT::I18N::encode_text($cookies->{commenter_name}->value(),'utf-8',undef);
+ }
+ if (!$commenter_name) {
+ if ($scode ne $sscode) {
+ return 0;
+ }
}
SCode::scode_delete($code);
SCode::scode_create($code);
をあてます。
パッチのあて方が分からない場合は、ダウンロードした SCode.pl を任意のエディタで開き、下記の青色部分を追加してください。
if($config->{action} == 1 && $blog_config && $blog_config->{scode_enable} == 1) {
my $code = $q->param('code');
my $scode = $q->param('scode');
my $sscode = SCode::scode_get($code);
my $class = $ENV{MOD_PERL} ? 'Apache::Cookie' : 'CGI::Cookie';
eval "use $class;";
my $cookies = $class->fetch;
my $commenter_name = "";
if ($cookies && $cookies->{commenter_name} && $cookies->{commenter_name}->value()) {
$commenter_name = MT::I18N::encode_text($cookies->{commenter_name}->value(),'utf-8',undef);
}
if (!$commenter_name) {
if ($scode ne $sscode) {
my $score = -3;
my $msg = "Comment junked due to incorrect code entered";
return ($score, [$msg]);
}
}
SCode::scode_delete($code);
SCode::scode_create($code);
:
(中略)
:
my $code = $q->param('code');
my $scode = $q->param('scode');
my $sscode = SCode::scode_get($code);
my $class = $ENV{MOD_PERL} ? 'Apache::Cookie' : 'CGI::Cookie';
eval "use $class;";
my $cookies = $class->fetch;
my $commenter_name = "";
if ($cookies && $cookies->{commenter_name} && $cookies->{commenter_name}->value()) {
$commenter_name = MT::I18N::encode_text($cookies->{commenter_name}->value(),'utf-8',undef);
}
if (!$commenter_name) {
if ($scode ne $sscode) {
return 0;
}
}
SCode::scode_delete($code);
SCode::scode_create($code);
SCode.pl を修正したら元のディレクトリにアップロードしてください。
以上です。
これでサイン・インを行うとセキュリティコードが非表示・無効になります。
2006.05.31 追記
Junk Comment に設定した場合に有効にならない不具合がありましたのでパッチおよび改変内容を修正しました。
- Movable Typeのコメント完了ページの内容を記事ごとに振り分ける方法
- Movable Typeで特定カテゴリのコメントを表示する方法
- Movable TypeでreCaptchaを利用する
- Movable Typeでカテゴリ別+ブログ記事別に新着コメントを表示する
- Movable Type 5でコメント投稿フォームをポップアップする
- Movable TypeのコメントでFacebookアカウント認証を有効にする
- Yahoo! JAPAN OpenID を省略表示する(その2)
- コメントにHTMLタグ挿入ボタンをつける(MT4/MT5版)
- コメント投稿にTwitterのOAuth認証を導入
- Movable Type 5でのMTCommentsタグの動作
- ブログ記事とコメントをひとつのフィードで配信する
- Movable Typeのコメント一覧からウェブページのコメントを除外して表示する
- Movable Typeのコメントにimg要素を許容する
- Movable Type(MT)のコメント投稿者の承認と禁止について
- Movable Type 5(MT5)のコメントのページ分割機能(その2:カスタマイズ)
≫ コメントスパム対策(SCode版) アップデート from .Fav(blog)
小粋空間さんのサイトでコメントスパム対策(SCode プラグイン)の第二弾が紹介... [続きを読む]
≫ SCode スパム対策プラグイン from PARADISE BLOG
今回は「SCode プラグイン」セキュリティコードを使ったスパム対策の導入です。... [続きを読む]
≫ コメントスパム防止プラグイン 「SCode プラグイン」 from ムーブメント・ブログ:トレンド情報サイト
... [続きを読む]
≫ コメントスパム from /PEN/
何やらどしどし頂くようになってしまったので…どうしたものかと思い、プラグインを導... [続きを読む]
≫ SCode導入('Д') from 白ぺ
トンダゴッサ!! たきたきでっす. 最近,スパムコメントが多くなっていて,困って... [続きを読む]
≫ セキュリティーコードを設置 from ハコラボ
[続きを読む]
≫ TypeKey対応(コメントスパム制御)。 from swimmer's blog ver. 3.0
TypeKeyとScodeのコメントスパム対策を施しました。テンプレートが正常に... [続きを読む]
いつもお世話になっております。
SCode紹介いただいて、こちらの記事の内容も早速導入しました。以前のSCodeの導入以降コメントスパムもまったく無くなり、助かってます。ありがとうございました。
>ARCHさん
こんばんは。
ご利用&ご連絡ありがとうございました。
うまくできてよかったです。
ではでは!
こんばんは、yujiroさん
その2:Typekeyサイン・インとの競合制御)の方も
記事を参考にして修正が出来ました。
何時も、ありがとうございます。
>mituruさん
こんばんは。
ご連絡ありがとうございました。
こちらもうまくできてよかったです。
ではでは!
こんにちは、今回も参考にさせて頂きました。
ただ、気になることあります。
TypeKeyを使ってサインインをしている時、サインインをしていなくても確認を押さずに投稿を押した場合はコメントが出来るのですがサインインをしていない状態で確認を押してから投稿ボタンを押した場合だけは何故かエラーになってしまいます。
何か考えられる原因はあるでしょうか?
>MOVEMENTさん
こんにちは。
こちらで動作確認したところ、ご指摘の不具合は発生しませんでした。
もし原因等お分かりでしたらご連絡ください。
それではよろしくお願い致します。
yujiroさん、いつもお世話になっています。
今回はSCodeプラグインと、こちらのTypeKeyIDとの競合制御を利用させていただきました。
また、いろいろと参考にさせていただきますのでよろしくお願いします。
>zumaさん
こんばんは。
お世話になります。
記事参照ありがとうございます。
うまく動作しているようで良かったです。
ではでは!
>yujiroさん
いつもおせわになります。
友人からの指摘です。TypeKeyでサインインして投稿したら、/ja.pmのTHROTTLED_COMMENTがでると言ってきました。確認するとSCodeのsetting ActionでRejectにしておくとそのようになるようです。とりあえずJunk Commentの設定にしています。(この場合、受け付けたというようなメッセージも何もでずに、登録されます)
原因がよくわかっていません。ご教示を!
>n_shuheiさん
こんにちは。
ご返事遅くなってすいません。
ご質問の件ですが、TypeKeyサインインのコメント投稿がひっかかるということは、プラグインファイルの修正がうまくできていないように思われます。Reject および Junk Comment になるのもそのためです(つまりセキュリティコードが入力されていないコメントとみなされています)。
なお、修正内容に不足があったため、本記事を昨日更新致しました。
こちらからはご質問の原因の詳細を確認することができませんので、新たな修正を行い、修正内容をご確認ください。
プラグインファイル修正後はファイルのアップロードもお忘れにならないよう、お願い致します。
それではよろしくお願い致します。
>yujiroさん
ありがとうございました。
SCodeのaction設定をRejectにしてもOKになりました。感謝!感謝!です。
originalのSCode.plのファイルが、どうもおかしかったので再度解凍して、それを修正しました。
>n_shuheiさん
こんにちは。
ご連絡ありがとうございました。
無事に回復してよかったです。
ではでは!
こんにちは。いつも参考にさせて頂いております。Scodeの設置とあわせてこちらの記事も内容も導入致しました。また、遅くなりましたが、バナーを貼らせて頂きましたので、ご連絡まで。今後ともいろいろと宜しくお願い致します。
>manaさん
こんにちは。
記事参照ありがとうございます。またバナー設置のご連絡も併せてありがとうございます。
こちらこそ今後ともどうぞよろしくお願い致します。
はじめまして。
いつも参考にさせていただいています。
質問があって書き込みさせていただきます。
迷惑コメント/トラックバック・フィルター「SCode Filter」は、次の理由で使えません: Can't call method "blog_id" on an undefined value at /home/sites/lolipop.jp/users/chu.jp-suc/web/mt/plugins/SCode/SCode.pl line 172.
の原因がお分かりになればと思いまして、、、。
ログに表示されているのが気になって仕方がありません。
前記事で「ASCII TBPing Filter Plugin」を導入したら解消されたとあったので「ASCII TBPing Filter Plugin」も導入しています。
が、上記のようなログエラーが出ます。
解消法をご教授いただければ幸いです。
よろしくお願いします。
はじめまして
私のブログでも、この記事を参考に…というより丸写しでやってみたのですが
同じスクリプトを貼り付けているにもかかわらず
「コメント・プレビュー」テンプレートでは正常に動作するのですが
「エントリー・アーカイブ」テンプレートでは「ページでエラーが発生しました」
というスクリプトエラーのメッセージが出て
SCodeの表示が消えたり消えなかったりします
「エントリー・アーカイブ」テンプレートはボリュームもあるので
どこか他の部分のScriptと干渉しているのではないかと想像するのですが
見当がつきません
心当たりなどアドバイスがいただけたら幸いです
>たけさん
私のブログでも同じエラーが出ているのに気付きました
調べたところ、そのエラーが出た時刻はすべて「迷惑トラックバック」を受けた時刻でした
原因は判らないのですが、善意のコメントやトラックバックを排除していないので
まあいいかな、と思っています
>たけさん
こんばんは。
ご返事遅くなってすいません。
ご質問の件は調べてみましたが現在不明です。
何か分かりましたらエントリーでご連絡致します。
それではよろしくお願い致します。
>まつおさん
こんばんは。
ご返事遅くなってすいません。
ご質問の件はサイン・インした後の動作についてでしょうか。こちらからいくつかのエントリーで試したところエラーにならなかったので、もし特定のエントリーでエラーになるようでしたらお知らせください。
それではよろしくお願い致します。
yujiroさん、お世話になります
サイン・インした後で個別記事を表示させると
ステータスバーに黄色い△マークと「ページでエラーが発生しました」が
すべてのエントリーで表示されます
IE6.0を使っている3台のPCで同様です
ブラウザを変えてみれば状況が変わるかもしれないとは思うのですが
まだそこまで試してはいません
>まつおさん
お世話になります。
ご質問の件ですが「Movable Type 3.3 で TypeKey サイン・イン時の JavaScript エラーを解消する」が参考になれば幸いです。
それではよろしくお願い致します。
>yujiroさん
すばやい回答ありがとうございます
まさしくその通りでした。修正を施したらエラーが解消されました
的確なアドバイスに感謝します
>まつおさん
こんばんは。
ご連絡ありがとうございました。
無事に直ったようで良かったです。
実はこの記事をエントリーしていたことをすっかり失念しており、Google検索でみつけました(笑)。
ではでは!