SCode プラグインでコメントスパムを制限する(その2:Typekeyサイン・インとの競合制御)

SCode プラグインでコメントスパムを制限する(その2:Typekeyサイン・インとの競合制御)

Posted at April 28,2006 12:30 AM
Tag:[Comment, Customize, MovableType, Plugin, SCode]
サイン・イン状態でセキュリティコードが表示されてしまう状態その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 に設定した場合に有効にならない不具合がありましたのでパッチおよび改変内容を修正しました。

関連記事
zenback
人気エントリー
トラックバックURL


トラックバック

コメントスパム対策(SCode版) アップデート from .Fav(blog)
小粋空間さんのサイトでコメントスパム対策(SCode プラグイン)の第二弾が紹介... [続きを読む]

Tracked on April 28, 2006 10:43 AM

SCode スパム対策プラグイン from PARADISE BLOG
今回は「SCode プラグイン」セキュリティコードを使ったスパム対策の導入です。... [続きを読む]

Tracked on May 7, 2006 8:27 PM

コメントスパム防止プラグイン 「SCode プラグイン」 from ムーブメント・ブログ:トレンド情報サイト
 ... [続きを読む]

Tracked on May 10, 2006 7:41 PM

コメントスパム from /PEN/
何やらどしどし頂くようになってしまったので…どうしたものかと思い、プラグインを導... [続きを読む]

Tracked on May 20, 2006 1:34 AM

SCode導入('Д') from 白ぺ
トンダゴッサ!! たきたきでっす. 最近,スパムコメントが多くなっていて,困って... [続きを読む]

Tracked on July 23, 2006 11:58 PM

セキュリティーコードを設置 from ハコラボ
[続きを読む]

Tracked on August 20, 2006 6:30 PM

TypeKey対応(コメントスパム制御)。 from swimmer's blog ver. 3.0
TypeKeyとScodeのコメントスパム対策を施しました。テンプレートが正常に... [続きを読む]

Tracked on October 10, 2006 12:46 PM
コメント

いつもお世話になっております。
SCode紹介いただいて、こちらの記事の内容も早速導入しました。以前のSCodeの導入以降コメントスパムもまったく無くなり、助かってます。ありがとうございました。

[1] Posted by ARCH : April 28, 2006 10:48 AM

>ARCHさん
こんばんは。
ご利用&ご連絡ありがとうございました。
うまくできてよかったです。
ではでは!

[2] Posted by yujiro : April 29, 2006 12:58 AM

こんばんは、yujiroさん 
その2:Typekeyサイン・インとの競合制御)の方も
記事を参考にして修正が出来ました。

何時も、ありがとうございます。

[3] Posted by mituru : May 7, 2006 8:24 PM

>mituruさん
こんばんは。
ご連絡ありがとうございました。
こちらもうまくできてよかったです。
ではでは!

[4] Posted by yujiro : May 8, 2006 11:02 PM

こんにちは、今回も参考にさせて頂きました。

ただ、気になることあります。
TypeKeyを使ってサインインをしている時、サインインをしていなくても確認を押さずに投稿を押した場合はコメントが出来るのですがサインインをしていない状態で確認を押してから投稿ボタンを押した場合だけは何故かエラーになってしまいます。

何か考えられる原因はあるでしょうか?

[5] Posted by MOVEMENT : May 11, 2006 9:48 AM

こんにちは。

何とか解決出来そうです、たぶん?

まだ問題は残っていますが...

ありがとうございました。

[6] Posted by MOVEMENT : May 12, 2006 1:09 PM

>MOVEMENTさん
こんにちは。
こちらで動作確認したところ、ご指摘の不具合は発生しませんでした。
もし原因等お分かりでしたらご連絡ください。
それではよろしくお願い致します。

[7] Posted by yujiro : May 13, 2006 4:09 PM

yujiroさん、いつもお世話になっています。
今回はSCodeプラグインと、こちらのTypeKeyIDとの競合制御を利用させていただきました。

また、いろいろと参考にさせていただきますのでよろしくお願いします。

[8] Posted by zuma : May 19, 2006 6:01 PM

>zumaさん
こんばんは。
お世話になります。
記事参照ありがとうございます。
うまく動作しているようで良かったです。
ではでは!

[9] Posted by yujiro : May 20, 2006 10:33 PM

>yujiroさん
いつもおせわになります。
友人からの指摘です。TypeKeyでサインインして投稿したら、/ja.pmのTHROTTLED_COMMENTがでると言ってきました。確認するとSCodeのsetting ActionでRejectにしておくとそのようになるようです。とりあえずJunk Commentの設定にしています。(この場合、受け付けたというようなメッセージも何もでずに、登録されます)
原因がよくわかっていません。ご教示を!

[10] Posted by n_shuhei : May 28, 2006 9:35 PM

>n_shuheiさん
こんにちは。
ご返事遅くなってすいません。
ご質問の件ですが、TypeKeyサインインのコメント投稿がひっかかるということは、プラグインファイルの修正がうまくできていないように思われます。Reject および Junk Comment になるのもそのためです(つまりセキュリティコードが入力されていないコメントとみなされています)。

なお、修正内容に不足があったため、本記事を昨日更新致しました。
こちらからはご質問の原因の詳細を確認することができませんので、新たな修正を行い、修正内容をご確認ください。
プラグインファイル修正後はファイルのアップロードもお忘れにならないよう、お願い致します。

それではよろしくお願い致します。

[11] Posted by yujiro : May 31, 2006 10:09 AM

>yujiroさん
ありがとうございました。
SCodeのaction設定をRejectにしてもOKになりました。感謝!感謝!です。
originalのSCode.plのファイルが、どうもおかしかったので再度解凍して、それを修正しました。

[12] Posted by n_shuhei : May 31, 2006 7:40 PM

>n_shuheiさん
こんにちは。
ご連絡ありがとうございました。
無事に回復してよかったです。
ではでは!

[13] Posted by yujiro : June 1, 2006 12:44 PM

 こんにちは。いつも参考にさせて頂いております。Scodeの設置とあわせてこちらの記事も内容も導入致しました。また、遅くなりましたが、バナーを貼らせて頂きましたので、ご連絡まで。今後ともいろいろと宜しくお願い致します。

[14] Posted by mana : August 20, 2006 8:47 PM

>manaさん
こんにちは。
記事参照ありがとうございます。またバナー設置のご連絡も併せてありがとうございます。
こちらこそ今後ともどうぞよろしくお願い致します。

[15] Posted by yujiro : August 21, 2006 3:22 PM

はじめまして。
いつも参考にさせていただいています。
質問があって書き込みさせていただきます。

迷惑コメント/トラックバック・フィルター「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」も導入しています。
が、上記のようなログエラーが出ます。
解消法をご教授いただければ幸いです。
よろしくお願いします。

[16] Posted by たけ : April 19, 2007 3:27 PM

はじめまして
私のブログでも、この記事を参考に…というより丸写しでやってみたのですが
同じスクリプトを貼り付けているにもかかわらず
「コメント・プレビュー」テンプレートでは正常に動作するのですが
「エントリー・アーカイブ」テンプレートでは「ページでエラーが発生しました」
というスクリプトエラーのメッセージが出て
SCodeの表示が消えたり消えなかったりします

「エントリー・アーカイブ」テンプレートはボリュームもあるので
どこか他の部分のScriptと干渉しているのではないかと想像するのですが
見当がつきません
心当たりなどアドバイスがいただけたら幸いです

[17] Posted by まつお : April 21, 2007 1:11 PM

>たけさん
私のブログでも同じエラーが出ているのに気付きました
調べたところ、そのエラーが出た時刻はすべて「迷惑トラックバック」を受けた時刻でした
原因は判らないのですが、善意のコメントやトラックバックを排除していないので
まあいいかな、と思っています

[18] Posted by まつお : April 22, 2007 1:48 PM

>たけさん
こんばんは。
ご返事遅くなってすいません。
ご質問の件は調べてみましたが現在不明です。
何か分かりましたらエントリーでご連絡致します。
それではよろしくお願い致します。

>まつおさん
こんばんは。
ご返事遅くなってすいません。
ご質問の件はサイン・インした後の動作についてでしょうか。こちらからいくつかのエントリーで試したところエラーにならなかったので、もし特定のエントリーでエラーになるようでしたらお知らせください。
それではよろしくお願い致します。

[19] Posted by yujiro : April 29, 2007 12:47 AM

yujiroさん、お世話になります
サイン・インした後で個別記事を表示させると
ステータスバーに黄色い△マークと「ページでエラーが発生しました」が
すべてのエントリーで表示されます
IE6.0を使っている3台のPCで同様です
ブラウザを変えてみれば状況が変わるかもしれないとは思うのですが
まだそこまで試してはいません

[20] Posted by まつお : May 1, 2007 9:57 PM

>まつおさん
お世話になります。
ご質問の件ですが「Movable Type 3.3 で TypeKey サイン・イン時の JavaScript エラーを解消する」が参考になれば幸いです。
それではよろしくお願い致します。

[21] Posted by yujiro : May 2, 2007 3:14 AM

>yujiroさん
すばやい回答ありがとうございます
まさしくその通りでした。修正を施したらエラーが解消されました
的確なアドバイスに感謝します

[22] Posted by まつお : May 2, 2007 9:40 PM

>まつおさん
こんばんは。
ご連絡ありがとうございました。
無事に直ったようで良かったです。
実はこの記事をエントリーしていたことをすっかり失念しており、Google検索でみつけました(笑)。
ではでは!

[23] Posted by yujiro : May 3, 2007 2:47 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)