(Javaサーブレットで)HTTP POSTまたはGETリクエストがHTMLフォームからの送信の結果であるかどうかを判断する方法はありますか?
7 に答える
あなたはおそらく隠されたフォームフィールド+クッキーでそれを行うことができます。
あなたができることは、ナンスを設定し、それをフォームの隠しフィールドとして持つことです。次に、フォームと一緒に送信されるCookieにそれを適用します。Cookieは非表示フィールドにリンクされている必要があり、ある種のナンスも含まれている必要があります。最後に、フォームが送信されると、Cookieと非表示フィールドをチェックして、それらが正しいかどうかを確認できます。必要に応じて、フォームの元のリクエストのIPアドレスとユーザーエージェントにリンクします。Javascriptを使用して、これらすべてにスパイスを加えることもできます。最初は非表示フィールドを空白にしますが、サーバーに非表示フィールドナンスを要求するためのajaxをいくつか作成します。
これは完璧ではありませんが、80%から90%の道のりが得られるはずです。それでも、まともなHTTPスキルを持っている人はそれを偽装する可能性があります。
それは疑問を投げかけます、しかし、なぜあなたはそのレベルで要求を区別したいのですか?
それとも、ユーザーが「送信」ボタンを押したかどうかを本当に把握しようとしているだけですか?(その場合、送信ボタンの名前/値のペアは、フォームのメソッドに応じて、要求エンティティ/クエリ文字列に含まれている必要があります。)
クライアント自体が協力しない限り不可能だと思います(クライアントがヘッダーを設定することを意味します)
あまり。ユーザーエージェント文字列を確認することもできますが、それは呼び出し元が設定できます。
さて、エージェント文字列を見て、それがブラウザからのものか、クライアントアプリからのものかを確認できます(独自のエージェント文字列があると仮定します)
正当な異なるアクセス方法を区別するのか、偽造された攻撃(つまり、通常のユーザーのように見せようとするロボットやハッカー)を区別するのかが明確ではありません。
最初のケースでは、kepraoはヘッダーを検査するためのいくつかの細かいアドバイスを持っています。2番目のケースでは、ロボットはキャプチャまたは認証によって妨害される可能性がありますが、基本的に要求を区別する方法はありません。
クライアントを制御できる場合は、カスタム ヘッダーを添付して送信者を識別することができます。
標準リクエストとは異なる Ajax 呼び出しを処理できるように、一部の JavaScript ライブラリは XmlHTTPRequests の作成時にすでにこれを行っています。
各着信要求のヘッダーを調べて、使用できるものがあるかどうかを確認してください。
JavaScript を使用して値を設定します。