0

検証と情報取得のためにサードパーティ サービスに送信するフォームがあります。サードパーティのバックエンドでは、エラーの URL を指定できます。1 つのオプションは「参照 URL」です。

それは一見完璧です。ユーザーが無効なフォームを POST すると、ユーザーがいるページが「リロード」され (実際にはそうではありませんが、それが印象です)、次のようなクエリ文字列から取得されたエラー メッセージが表示されます。

http://somesite.com/?errorMessages=some%20message~~~some%20other%20message~~~etc

個別のエラー メッセージを解析し、何が問題なのかをユーザーに通知する DIV にプッシュします。ここまでは順調ですね。

ただし、ユーザーはフォームを台無しにし続け、再度 POST すると、リファラーはエラー メッセージを含む URL 全体になります。サーバーは、元のエラー メッセージ (リファラーです!) と残りの問題を返します。

http://somesite.com/?errorMessages=some%20message~~~some%20other%20message~~~etc&errorMessages=new%20message~~~another%20new%20message~~~etc

問題を確認できますが、明確にするために:

  1. フォームは最初から十分に長いです。これらのチェックされていない追加により、最終的にクエリ文字列がブラウザーの制限を超え、エラーが発生します。
  2. 解析アルゴリズムは、最新の問題のみを報告していません。元の問題もまだ報告されています。

ふぅ

これは、単純な質問の長い裏話です。

submit イベントで、JavaScript を使用して参照 URL からクエリ文字列をクリアする方法はありますか? リファラーのスプーフィングをしたり、正当なセキュリティ上の問題を回避したりしたくありません。クエリ文字列を除いた「真の」参照ページを送信できるようにしたいだけです。

私はすでにjQueryを使用しているため、どの回答でも自由に使用できます。

4

1 に答える 1

1

これを行う1つの方法は次のとおりです。

  1. サード パーティのサイトへの投稿には、リファラーhttp://myapp.com/mypageが使用されます。
  2. サード パーティのサイトがhttp://myapp.com/mypage?errorMessages=Invalidにリダイレクトされる
  3. サーバー側のHTTPリクエストハンドラー(それが何であれ)で、エラーメッセージを(サーバー側の)セッションに配置し、http://myapp.com/mypageにリダイレクトします。
  4. ページのレンダリング中に、セッションから errorMessages を使用します (必要に応じてそれらをクリアします)。これらはフラッシュセッション変数と呼ばれていると思います。
于 2012-11-19T23:05:03.737 に答える