32

プロセスをシンプルに保ちながら、ボットがフォームを送信するのを防ぐ良い方法を見つけようとしています。素晴らしいアイデアをいくつか読んだことがありますが、フォームの送信時に確認オプションを追加することを考えました。ユーザーが [送信] をクリックすると、ユーザーの操作が必要な Javascript 確認プロンプトがポップアップ表示されます。

これでボットを防げるでしょうか、それともボットが簡単に見つけてしまうのでしょうか? 以下は、私のアイデアを示すコードと JSFIddle です。

JSFIDDLE

$('button').click(function () {
  if(Confirm()) {
    alert('Form submitted');
    /* perform a $.post() to php */
  }
  else {
    alert('Form not submitted');
  }
});

function Confirm() {
  var _question = confirm('Are you sure about this?');
  var _response = (_question) ? true : false;
  return _response;
}
4

10 に答える 10

80

これは多くの人が遭遇した問題の1つです。user166390がコメントで指摘しているように、ボットはjavascriptをバイパスして、サーバーに直接情報を送信できます(cURLPostmanなどの単純なユーティリティを参照)。多くのボットは現在、JavaScriptを消費して操作することができます。Hari krishnanは、キャプチャの使用を指摘しています。キャプチャの中で最も普及していて成功しているのは(私の知る限り)reCaptchaです。しかし、キャプチャには問題があり、主に非効率でアクセスできないという理由で、ワールドワイドウェブの大要によって推奨されていません。

そして忘れないように、攻撃者はいつでも人間の知性を展開してキャプチャを打ち負かすことができます。攻撃者がスパム目的でキャプチャをクラックするためにお金を払って、労働者が違法な活動に参加していることに気付かないという話があります。Amazonは、このようなことに取り組むMechanicalTurkと呼ばれるサービスを提供しています。アマゾンは、もしあなたが彼らのサービスを悪意のある目的で使うとしたら、激しく反対するでしょう、そしてそれはお金がかかり、紙の証跡を作るという欠点があります。しかし、そのような異議を唱えないであろうより多くのerhmプロバイダーがそこにあります。

それで、あなたは何ができますか?

私のお気に入りのメカニズムは非表示のチェックボックスです。「当社のサービスの利用規約に同意しますか?」のようなラベルを付けてください。おそらく、いくつかの深刻な用語へのリンクがあっても。ただし、デフォルトではチェックを外し、cssで非表示にします。ページ外に配置し、高さまたは幅がゼロのコンテナーに配置し、その上にdivを配置してz-indexを高くします。ここで独自のメカニズムを実行し、創造性を発揮してください。

秘密は、チェックボックスが人間に表示されないことですが、ほとんどのボットは、実際の視覚ではなく、ページを調べて直接操作することでフォームに入力します。したがって、そのチェックボックス値セットに付属するフォームを使用すると、人間が入力したものではないことがわかります。この手法はボットトラップと呼ばれます。自動フォーム入力ボットのタイプの経験則は、人間が個々のサイトを克服するために介入しなければならない場合、彼らは彼らの時間を広めることによって稼いだであろうすべてのお金を(彼らの時間の形で)失ったということですスパム広告。

(以前の経験則では、フォーラムまたはコメントフォームを保護していることを前提としています。実際のお金や個人情報がライン上にある場合は、1つのヒューリスティックよりも多くのセキュリティが必要です。これはあいまいさによるセキュリティです。あいまいさは、カジュアルなスクリプトによる攻撃からユーザーを保護するのに十分です。これにより、すべての攻撃からWebサイトが保護されると思い込まないでください。

秘密の残りの半分はそれを維持することです。チェックボックスがオンになっている場合は、応答を変更しないでください。同じ確認、ありがとう、またはその後のメッセージやページを表示します。これにより、ボットは拒否されたことを知ることができなくなります。

私はタイミング法のファンでもあります。サーバー側で完全に実装する必要があります。ページが永続的に提供された時間(基本的にはセッション)を追跡し、フォームの送信が行われた時間と比較します。これにより、偽造が防止され、時間指定されていることをボットに通知することもできます。フォームまたはJavaScriptを使用して、より洗練されたアプローチを採用していることを通知します。

繰り返しになりますが、同じサンキューページを提供している間は、リクエストを黙って破棄します(または、スパムフォームへの応答に遅延を導入します。これにより、サーバーを圧倒するのを防ぐことはできず、圧倒することもあります。より多くの接続をより長く開いたままにすることで、より高速になります。その時点で、ハードウェアソリューション、ロードバランサーセットアップのファイアウォールが必要です。

攻撃者の速度を落とすためにサーバーの応答を遅らせることについては、多くの場合、ブルートフォースパスワードの試行という形で多くのリソースがあります。このITセキュリティの質問は良い出発点のように見えます。

キャプチャに関する最新情報

私はしばらくの間、コンピュータビジョンとフォーム送信のトピックに関してこの質問を更新することを考えていました。最近、コンピュータビジョンの愛好家であるSteveHicksonによるこのブログ投稿を指摘する記事が浮上しました。Snapchat(どうやらいくつかのソーシャルメディアプラットフォーム?私はそれを使ったことがなく、毎日年をとっています...)は、幽霊を含む写真(実際には漫画)を識別しなければならない新しいキャプチャのようなシステムを立ち上げました。スティーブは、これが提出者についてのスクワットを検証しないことを証明しました。なぜなら、典型的な方法では、コンピューターはこの単純なタイプの画像をより良くそしてより速く識別するからです。

同様のアプローチを他のキャプチャタイプに拡張することを想像するのは難しいことではありません。検索したところ、これらのリンクも興味深いことがわかりました。

reCaptchaは壊れていますか?
実用的な非画像ベースのキャプチャ
CAPTCHAを打ち負かすことができるとわかっている場合、なぜまだそれらを使用しているのでしょうか。
CAPTCHA画像を使用する真の代替手段はありますか?
3人のハッカーがGoogleのreCaptchaをどのようにひざまずかせたか-オーディオCaptchaに関するものであるため、非常に興味深いものです。

ああ、そして私たちは義務的なXKCDコミックなしではほとんど完成しませんでした。

于 2013-03-10T07:51:46.783 に答える
5

今日、私は自分のフォームの継続的なスパムを停止することに成功しました。もちろん、この方法は常に機能するとは限りませんが、単純で、この特定のケースではうまく機能しました。

私は次のことをしました:

  • フォームのアクション プロパティをmustusejavascript.aspに設定すると、送信が機能せず、訪問者は JavaScript を有効にする必要があるというメッセージが表示されます。

  • フォームの onsubmit プロパティを、フォームの action プロパティをreceivemessage.aspのような実際の受信ページに設定する JavaScript 関数に設定します。

問題のボットは明らかに JavaScript を処理しないため、スパムは表示されなくなりました。そして、人間 (javascript をオンにしている) にとっては、何の不都合も余分なやり取りもなしに機能します。訪問者が JavaScript をオフにしている場合、送信すると、それに関する明確なメッセージが表示されます。

于 2014-03-05T00:35:46.217 に答える
3

あなたのコードはボットの提出を妨げることはありませんが、それはあなたのコードがいかにあるかによるものではありません。actionそこにある典型的なボットは、URL(属性)に対して外部/自動POSTリクエストを実行する可能性が高くなります。典型的なボットは、HTML、CSS、またはJavaScriptをレンダリングしていません。彼らはHTMLを読んでそれに基づいて行動しているので、クライアントロジックは実行されません。たとえば、URLをCURLすると、JavaScriptを読み込んだり評価したりせずにマークアップを取得できます。<form>一致するキーを使用してそのURLを検索し、そのURLに対してCURLPOSTを実行する単純なスクリプトを作成できます。

そのことを念頭に置いて、ボットの送信を防ぐためのサーバー側のソリューションが必要です。キャプチャ+CSRFで十分です。(http://en.wikipedia.org/wiki/Cross-site_request_forgery

于 2013-03-10T07:34:04.683 に答える
2

captchaフォームに追加するだけです。キャプチャが含まれるようになるためdifferentimagesボットはそれを行うことができませんdecode。これは、すべてのウェブサイトで最も広く使用されているセキュリティの1つです...

于 2013-03-10T07:32:22.360 に答える
2

javascriptで目標を達成することはできません。クライアントがJavaScriptを解析し、メソッドをバイパスできるためです。キャプチャを介してサーバー側で検証を行う必要があります。主なアイデアは、サーバー側にシークレットを保存し、クライアントから送信されたフォームをサーバー側のシークレットで検証することです。

于 2013-03-10T07:36:09.750 に答える
1

テキストボックスに永遠を記入する必要なしに提供される登録時間を測定することができます!

于 2013-03-10T07:35:51.520 に答える
1

プログラムによる入力の登録を妨げるフォーム入力検証に出くわしました。

私の最初の戦術は、要素を取得して、必要なオプションに設定することでした。入力フィールドへのフォーカスをトリガーし、各要素へのクリックをシミュレートしてドロップダウンを表示し、値を変更するためのイベントを発生させる値を設定しました。しかし、クリックして保存しようとすると、登録されていない入力が変更されました。

    ;failed automation attempt because window doesnt register changes.
    ;$iUse = _IEGetObjById($nIE,"InternalUseOnly_id")
    ;_IEAction($iUse,"focus")        
    ;_IEAction($iUse,"click")
    ;_IEFormElementOptionSelect($iUse,1,1,"byIndex")
    ;$iEdit = _IEGetObjById($nIE,"canEdit_id")
    ;_IEAction($iEdit,"focus")
    ;_IEAction($iEdit,"click")
    ;_IEFormElementOptionSelect($iEdit,1,1,"byIndex")
    ;$iTalent = _IEGetObjById($nIE,"TalentReleaseFile_id")
    ;_IEAction($iTalent,"focus")
    ;_IEAction($iTalent,"click")
    ;_IEFormElementOptionSelect($iTalent,2,1,"byIndex")
    ;Sleep(1000)
    ;_IEAction(_IETagNameGetCollection($nIE,"button",1),"click")

これにより、マウスのアクションを直接操作して入力を入力し、マウスの種類の動作でより多くの選択をシミュレートする方法を再考するようになりました。言うまでもなく、企業の製品画像を更新するために、画像を 1 つずつ手動でアップロードする必要はありません。文字の前に Windows 番号を使用してスクリプトをディレクトリの最後に配置し、画像アップロード ウィンドウがポップアップしたら、アクティブなアクセシビリティを使用してウィンドウから syslistview を取得し、画像である 2 番目の要素を選択する必要があります。最初の要素はフォルダです。 . または findfirstfile の最初の要素がファイルのみを返す呼び出し。名前を使用してアイテムのデータベースでアイテムを検索し、それらのアイテムにアクセスして、画像のアップロード後にいくつかの属性を更新します。次に、ファイルをそのフォルダーから別のフォルダーに移動して、ファイルが移動しないようにします。

低レベルのデータ入力担当者がどのように時間を節約し、これらすべての悪意のあるフォーム検証チェックと戦うかを共有するだけです.

よろしく。

于 2014-10-05T00:27:02.207 に答える