2013-09-03 14 views
5

私は、JSを使ってチェックボックスを設定する必要があるフォーム(つまりhttp://uxmovement.com/forms/captchas-vs-spambots-why-the-checkbox-captcha-wins/)でボットを抑えることができます。この戦略は効果的ですか?ユーザーは物理的にボックスをチェックする必要がありますか、またはクライアント側のJSを使用してそれをチェックすることはできますか?JavaScriptを使用したスパムとボットの防止チェックボックス

答えて

5

記事は私にとって怪しいようです。 チェックボックスのcaptchaは、盲目的にフォームに記入するスパムボットに対する適切な防御のようですが、あなたのページに何らかの洞察を持つボットを書くと、そこ。

最終的に重要なのはHTTP投稿です。サーバーがPOSTを確認できる場合は、POSTの作成方法やクライアントで実行されたスクリプトは関係ありません。サーバがに等しい値を持つNotABotというPOST値を探している場合、スパムボットはクライアント側スクリプトでチェックボックスが作成されているかどうかをサーバが知らないため、この値をPOSTに単純に含めることができます。値が最初のHTMLで提供されたランダム値と等しくなければならない場合、スパムロボットはその値もスクレイプできます。値がイメージに指定された値と一致する必要がある場合は、基本的にCAPTCHAが作成されています。

最終的には、スパムのリスク許容度とユーザビリティの欲求に依存するコスト/便益分析です。小さなWebサイトを実行すると、おそらくすべての投稿が許可される前に人間によって管理される可能性があります。おそらく、ユーザビリティの低下を保証するために十分なスパムを取得しないでしょう。数百万人が使用している巨大なサイトを運営しているのであれば、ボットを避けるためのより積極的な対策が必要かもしれません。それは本当にあなたの作ることです。

+0

ありがとうございましたMike、どのようなページが読み込まれ、ランダム値で隠された入力が含まれていますか?JSは隠された入力の値をサーバーに送るためにajaxを開始し、最初の値のハッシュ隠れた入力(または最初の隠れた入力は必要ないかもしれませんが、セッションに格納されていますか?)。フォーム提出時に、サーバーは正しい値をチェックしますか? – user1032531

+0

すべてが難読化によるセキュリティです。スクリプトは*それでもすべて自動的に*書くことができます。あなたが投稿した記事のコメントを読む、それらの多くは非常に洞察力があります。コンセンサスは、これらの技術が特定のタイプのスパムを最小限に抑えることができると思われますが、すべてのスパムを排除することはできません。 –

+0

@ user1032531この記事をチェックしてください:http://www.sitepoint.com/captcha-problems-alternatives/彼らは非対話型ソリューションについて語ります。そして、正直なところ、最も効果的で、最も目障りなデザインのようです。しかし、Mikeが指摘したように、それはあなたのアプリケーションと要件に大きく依存しています。 –

4

控えめなアプローチの最善の策は難読化です。つまり、攻撃の機会がないと仮定すると、悪意のあるスパミング会社が、あなたのサイトのボットを書く方法を理解するために誰かを雇う(何百万人ものユーザーにサービスを提供しない限り、時間の99%は起こらない)ので、あなたのサイトのフードの下で何が起こっているのかを理解することは、困難で、できるだけ多くの時間を無駄にします。

私は自分のサイトのゲストコメントにボットを持っていましたので、船に乗ることに決めました。 (Javascriptのは、私のサイト上で必要とされる。それが無効になっusualyボットやWeb開発者です持っている人々の非常に小さな割合)私は、フォームタグを使用し、常にCSS-隠されたダミーの乱数を持っていない

  1. 実際の送信ボタンと混合された送信ボタン。
    • 送信はJavascript/ajaxなので、これは未だに特定されていないボットを除外しています。
    • 私はCSS(input type = "hidden"ではない)によって隠されたテキスト入力をいくつか作成し、 "email"や他のキーワードのように適切に名前を付けます。
      • これらが記入されてサーバーに送信された場合、私はそれがボットだと推測できます。
      • Botは、特定のフィールドに入力するだけで理解する必要があります。
    • 私のサーバーとのインターフェイスでは、クライアントがスクランブルした隠しキャプチャコード(ユーザーには見えません)が必要です。
    • サーバーはランダムなキャプチャ文字列をクライアントに渡します。
    • クライアントは、日付、コメントの長さ、およびDOMの一部の文字列のラスタライズに基づいてキャプチャをスクランブルし、スクランブルされたキャプチャを検証のためにサーバーに戻すJavascript関数を使用します。
    • サーバーは同じ機能を実装しています。
    • ハッカーはこのJavascript機能を盗んだり、そうでなければ参照することができます。そのため、ユーザーのセッションに応じてランダム化されたURLでスワップアウトされ参照されるスクランブリング機能が10種類ほどあります。
  2. 空のユーザーエージェント文字列を持つクライアントは、コメントを追加したり、サイトを更新したりすることはできません。
  3. ウェブサイトでは、ボットからの疑いのあるコメントは表示されず、代わりに数時間でコメントなどが表示されるというメッセージが表示されます。
  4. 私のJavascriptのソースコードを見ている人が好きなことのもう一つは、jsfuck.comメソッドを使用してその一部を難読化することです。彼らはそれが何であるかを知っていれば誰も止めることはありませんが、難読化されたコードを見たときに顔を見ることが好きです。
  5. テキスト入力/キー入力がkeydownイベントが発生したかどうかを確認するためにチェックされます。
  6. これですべての人が人を雇ってあなたのウェブサイトにアクセスして迷惑をかけてしまうのを止めません。したがって、完全にコピーされてテキストエリアに貼り付けられたコメントは疑わしいとマークされ、表示される前にレビュー用にフラグが立てられます。
    • そのIPを持つユーザーからの次の1時間以内のすべてのコメントにもレビュー用のフラグが付けられ、すぐには表示されません。
  7. コメントは1つ以上のリンクのコメントに付けられます。ほとんどのボットは、これまで多くのサイトでこの制限を認識しており、リンクを貪欲にしていません。
関連する問題