ユーザーの操作なしの人間の検証

php user-interface yii
ユーザーの操作なしの人間の検証

私が取り組んでいるシステムでは、ちょっとした問題があります。HTTPの基本的なルールの1つをいじっており、ユーザーがGETリクエストを介してデータを投稿できるようにしています。

まだ怒らないでください:これには理由があります:ユーザーが外部環境からアプリケーションに到着し、追加の入力を求めることができません(したがって、必要なデータはすべてGETクエリに含まれています)。 ブラウザウィンドウが開いたらすぐに閉じることができ、入力を保存する必要があります。 いいえ、AJAX、API、またはその他の内部メソッドを介してこれを行うことはできません。

これらの要件は、キャプチャ、計算、フォームなどを除外します。 そのため、ボット/クローラーが何かを「誤って」送信するのを防ぐために、何らかのタイプの検証が本当に必要だという問題が残っています。

私が検討している解決策の1つは、javascript onloadを介して自分自身を送信する非常に軽量なランディングページを作成することですが、それは私のアプリケーションで最もgliいものになるので、それを防止しようとしています。 もう1つの方法は、ランディングページで処理を行わず、代わりにAJAX呼び出しを使用してこれを行うことです。 ただし、これは古いブラウザー(および多くの携帯電話)が別のソリューションを使用する必要があることを意味します。

背景:PHP5.3で記述されたアプリケーションは、Yiiフレームワーク上に構築され、100%クロスブラウザ互換です(これには、ほとんどの携帯電話が含まれます)。

*もう少し背景:*私が話している「外部環境」は、電子メールクライアントからWebサイトまでさまざまです。 実行時にコンテンツを操作することはできません。

*更新:*私がやろうとしていることは次のとおりです。おそらく、ここに投稿されたソリューションをフォールバックメカニズムで組み合わせて、一連の検証を試行します.1。 Ajax検証2。 非Ajax javascript検証(自動フォーム送信)3。 ユーザー入力のプロンプト(ユーザーは確認ボタンをクリックする必要があります)

これに加えて、http://www.kloth.net/internet/bottrap.phpで説明されているようにボットトラップを実装します。

これを構築した後、何か別のことをした場合は投稿を更新します。

  1  0


ベストアンサー

ユーザーが行き来する場所を変更できる場合は、チェックサムを含めることができます。 GETリクエスト内のすべてのフィールドのある種のチェックサムまたはハッシュを計算し、GETリクエスト自体に追加します(つまり、 Javascriptを使用しますが、ユーザーが着地する場所ではなく、ユーザーがアクセスする場所で実行してください)。 次に、アプリケーションで、チェックサムが正しくないすべてのヒットを拒否します。

1


アプリがどこにあり、外部環境が実際にどこにあるかを理解するのは困難です。 しかし、私が使用する簡単なボット除去手法の1つは、「* login 」または「 name *」という名前の隠しフィールドを配置し、空の値を与えることです。

人間はこの隠されたフィールドを決して埋めませんが、*スパムボット*は常にそれを埋めます。 そのため、そのフィールドが空でないすべてのリクエストを破棄できます。

次に、スパムボットだけでなく、*クローラー*を防止する必要があります。 決してやったことはありませんが、ここにいくつかの考えがあります。 最初のmouseMoveイベントでフォームに非表示の「人間」の非表示入力を追加できます(ただし、キーボードのみ-視覚障害者の場合は、ユーザーはロボットと見なされます)。 したがって、このフィールドが存在しない場合は、javascript「confirm」を起動して、「ロボットであることを確認するか、人間であればキャンセルをクリックしてください」と尋ねることができます。 この隠しフィールドの値がjsで上書きするデフォルト値を含むアンカーリンクを作成できます。 特に正しい動作を得るために確認をキャンセルする必要がある場合(およびほとんどのユーザーのmouseMoveイベントによる確認を避けるため)、ほとんどのクローラーは値を上書きしません。

1


タイトルとURLをコピーしました