0

データベースにレコードを挿入するフォームが送信され、操作が成功した場合、リダイレクトを実行してから、URLにいくつかのパラメーターを渡して、新しく挿入されたレコードをヘッダーメッセージ(つまり、「挿入に成功しました」)とともに表示します。 。

response.sendRedirect(yPage + "?pid=" + ipd + "&feedback=" + form.getFormFeebackSB() );

次に、次のようにjspで表示します。 <c:out value="${param.feedback}" />

操作をべき等にしたいので、転送の代わりにリダイレクトを使用します。挿入が成功した後に更新を押したユーザーを使用した場合forward、ほとんどの場合、警告ポップアップで[再試行]をクリックすると、挿入が重複していました。

その後、IT部門は、私にXSSの脆弱性があることを発見しました。

page.jsp?feedback=%3Cscript%20type=%22text/javascript%22%3Ealert%28%27xss%27%29;%3C/script%3E

だから私はこれに変更しました: <c:out value="${param.feedback}" escapeXml='true'/>

<br>しかし、FeedbackSBのいずれかがエスケープされ、ヘッダーメッセージが表示されるようになりました。

Insert was successful<br>An email was sent to Joe<br>Now Complete the XYZ Form;

送信をべき等に保ち、XSSから保護しながら、メッセージをユーザーに返す標準的な方法は何ですか?

編集:

Flash Scopeを検索して、このhttp://blog.smartkey.co.uk/2011/01/implementing-flash-scope-in​​-java-web- applications /に出くわしました 。私のアプリケーションは、フレームワーク、そのリンクで言及されているフィルターは簡単に組み込むことができ、非常に少ない労力でフラッシュスコープを実装することができました。

4

1 に答える 1

3

リダイレクトでメッセージ自体を渡さないでください。セッション内の一意のキーの下にメッセージを保存し、このメッセージのキーを URL パラメーターとしてリダイレクトしてから、セッションに移動し、メッセージを取得して表示します。

また、セッションからメッセージをすぐに削除します。ユーザーが更新した場合、挿入が成功したことを再度ユーザーに伝える理由はありません。

ほとんどの MVC フレームワークは、通常 Flash スコープと呼ばれるもの (取得されるとすぐにセッションから削除されるセッション属性) を使用して、これを行います。

于 2012-09-19T21:20:40.653 に答える