JavaScript によるコメントスパム対策

Posted by
ぴろり
Posted at
2005/05/28 00:30
Trackbacks
関連記事 (1)
Comments
コメント (1)
Post Comment
コメントできます
Category
MovableType カテゴリ
 を持つものとして、対策は避けられない道にあるようです。 当サイトでは幸いなことに未だにその害を被ってはいませんが、 先輩諸氏のは日々、スパマーとの激烈な戦い(?)を繰り広げられています。
 現在、 様々なコメントスパム対策 が提案されていますが、これ一つで完璧と言える対策がないのが現状です。 管理者は、これらの方法を上手く組み合わせることで、スパマーへの防御力を高めようとしています。

 このエントリでは、対策の 1 つの方法として、 を利用することを提案しています。 先に述べたように、これも決して決定打と言える対策案ではありませんが、 他の方法と組み合わせることで、効果的にをフィルタできるでしょう。 この方法が、今のあなたの対策ロジックを少しでも強固にするお手伝いになれることを願って…

この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する | Twitterにポストする

    背景

      上でできた幾つかの対策のうち、当サイトでも次の方法を参考に対策を行うことにしました。

    1.投稿時に隠し属性(hidden)データを送信する

     この手法は "女子十二月号:MovableTypeコメントスパム対策" で紹介されています。 要は投稿フォームにおいて、独自のデータフィールドを type="hidden" として埋め込み、 登録時にそのフィールドの存在をチェックするというものです。
     初期のボットは Movable Type 標準に従ってリクエストを投げて来ていたため、 これで弾くことができたようですが、最近のボットはフォーム内のデータフィールドをし、 hidden フィールドを偽装してリクエストをしてくるそうです。 そのため、この手法は次第に効果が薄くなりつつあります。

    2. が全て半角英数字のものを拒否する

     "きままにポロポロ:続々コメントスパム" にある方法では、の多くがからのものであることを利用しています。 一方、それに続く "きままにポロポロ:コメントスパム ひらがな対策" では、記事に句読点や連続した平仮名を必須とすることを提案されています。 これは半角英数のみのを弾くのではなく、 一般のお客様(=その多くは日本人)から頂くの特徴を上手く使った方法で、かなり強固な対策に見えます。
     しかし、この方法であっても、中に本文から適当に数行をコピー&ペーストするような対策を打たれてしまうと効果がありません。 また、このルールを回避するためのが出回ることも懸念されます。

     上記の 2 つの手法は、ルールが比較的単純で対策プログラムが組み易く思えます。 現在のボットは巡回しているページの を文字解析しているものと推測されますが、 例えばこれに

    • hidden 属性のフィールドを発見したらリクエスト URL に追加する
    • ページ先頭から 2 バイト文字を 100 バイト分コピーしてに付加する
    という対策を取られてしまうと、を判別することが難しくなります。 そしてまた、この程度のボットであれば などで容易に書けてしまいそうです。

     対策として注目すべき点は、 一般のお客様はを介してを投稿しますが、 ボットは直接にを投稿してくる、という点でしょう。 もう少し詳しく言えば、お客様のはページの意味を理解してを投稿しますが、 ボットはページの文字を眺めてを投稿してきます。
     そこで が登場します。 通常のはページに埋め込まれた の文字解析・構文解析を行い、 スクリプトを理解し、その実行を経て結果を導き出します。 それに対してボットが を眺めただけではその結果を出すことはできません。 これに対応するには、ボットが の文字解析・構文解析・実行エンジンを持つ必要があり、 その対策コストは格段に大きくなることが予想されます。 今回の対策はこの特徴を利用します。

    対策

    Step.1 - hidden 属性を埋め込む

     投稿フォームに hidden 属性で独自データを埋め込みます。 ここまでは先の方法と同じなのですが、送信される値には不正な値を与えておきます。 ボットが何も考えずに正直にこの値を送信すると、それはということになります。

    Step.2 - を埋め込む

     次にでページが開かれた時に、先のフィールドに正しいデータを埋め込み直すための を追加します。 このスクリプトはページの最後にでも追記して必ず実行されるようにします。 また、お客様には を有効にして頂く旨を書いておく方が安全かも知れません。
     この例では McCarthy(マッカーシー) 関数という聞いたこともないような計算をしていますが、 とりあえずこの関数は必ず 91 という結果になります(笑)  従って、本来のお客様は script_auth が enable ではないわけです。  …まぁ、ボットが本腰を入れて対策をしてくるまでは、 この関数はもっと簡単なものでも構わないかもしれません(例えば、1+2+3+4+5...を計算するようなもの)

    Step.3 - mt-comment.cgi で拒否する

     最後に送信されたデータが正しい値か判定し、 不正な値であった場合はエラーとなるように mt-comment.cgi を修正します。 この部分の処理は先の 3 つのサイトで紹介されている部分を参考に修正します。

    この記事を読んだ人はこんな記事も読んでいます 記事リコメンデーションについて

    その他の関連する記事


    関連記事/トラックバック (全 1 件中、最新 5 件まで表示しています)

    モーグルとカバとパウダーの日記 のスクリーンショット
    タイトル
    [pc][spam]Javascriptを利用したコメントスパム対策
    Trackbacked at
    2007/06/25 17:27
    from
    モーグルとカバとパウダーの日記
    評価
    Web Scouter
    概要
    MT-Keystrokes というMT用プラグイン - モーグルとカバとパウダーの日記 こちらのコメントで教えていただいた、MT-Keystrokesと...

    この記事にトラックバックを送るには?

    寄せられたコメント (全 1 件中、最新 5 件まで表示しています)

    Posted by
    ぴろり
    at
    2005/05/28 01:21
    ID
    QiUCMskk

    …なんて書いておいて自分が弾かれたらイヤだなぁ…
    (;=ω=)ノ ちとテスト

    コメントを投稿する

     
     (匿名可/必須/公開)
     (匿名可/必須/非公開)
     (必須)
    コメントスパム防止のため投稿前に ランダムな数字 CAPTCHAについて を入力してから投稿してください。お手数ですがご協力のほど宜しくお願いいたします。
     
    MovableType, NovableType, JovableType, KovableType, MIvableType, M9vableType, M0vableType, MPvableType, MLvableType, MKvableType, MoCableType, MoFableType, MoGableType, MoBableType, MovQbleType, MovWbleType, MovSbleType, MovZbleType, MovaVleType, MovaGleType, MovaHleType, MovaNleType, MovabKeType, MovabOeType, MovabPeType, MovablWType, Movabl3Type, MovablRType, MovablDType, MovablSType, MovableRype, Movable5ype, Movable6ype, MovableYype, MovableGype, MovableFype, MovableTTpe, MovableT6pe, MovableT7pe, MovableTUpe, MovableTHpe, MovableTGpe, MovableTyOe, MovableTy0e, MovableTy-e, MovableTyLe, MovableTypW, MovableTyp3, MovableTypR, MovableTypD, MovableTypS スパム JavaScript, HavaScript, UavaScript, IavaScript, KavaScript, MavaScript, NavaScript, JQvaScript, JWvaScript, JSvaScript, JZvaScript, JaCaScript, JaFaScript, JaGaScript, JaBaScript, JavQScript, JavWScript, JavSScript, JavZScript, JavaAcript, JavaWcript, JavaEcript, JavaDcript, JavaXcript, JavaZcript, JavaSXript, JavaSDript, JavaSFript, JavaSVript, JavaScEipt, JavaSc4ipt, JavaSc5ipt, JavaScTipt, JavaScFipt, JavaScDipt, JavaScrUpt, JavaScr8pt, JavaScr9pt, JavaScrOpt, JavaScrKpt, JavaScrJpt, JavaScriOt, JavaScri0t, JavaScri-t, JavaScriLt, JavaScripR, JavaScrip5, JavaScrip6, JavaScripY, JavaScripG, JavaScripF