http://wicket-study.seesaa.net/archives/200802-1.html 2008年02月27日Wicketで入力フォームの情報を受け取る時の問題どうすればよいか分からなくなってきた。。。問題点
気に入らないのは、入力データを取得する時にエスケープされてしまう点。いわゆるサニタイジングが入力データに対して行われている。PHP(は良く知らないが)に似たような機能があったと思う。こちらのセキュリティガイドラインでもあるように出力時に行うべきだと思う。 セキュリティガイドライン これを解消する方法として2種類の方法を見つけた
1.の方法はまだ問題が残ってしまう。エスケープされずに取得することはできるのだが、今度は出力時にもエスケープされないのです。 検証 試してみる。(Wicket-1.3.1)TextAreaをHTMLに用意。 <textarea wicket:id="textarea" cols="80" rows="3"></textarea>このTextAreaに以下の文字列を入力して送信。(XSS想定) </textarea>そのままサーバサイドで入力値を受け取った結果 getModelObjectAsStringの場合→ </textarea>※エスケープされた状態で取得される getModelObjectの場合→ </textarea>※そのまま ブラウザにレスポンスされたレンダリング結果 </textarea>※XSSにならない。 textareaにsetEscapeModelStrings(false)としてエスケープをしないようにする textarea.setEscapeModelStrings(false); サーバサイドで入力値を受け取った結果 getModelObjectAsStringの場合→ </textarea>※エスケープされない状態で取得される getModelObjectの場合→ </textarea>※そのまま ブラウザにレスポンスされたレンダリング結果 </textarea>※XSSになる!! というわけで、2.のgetModelObjectした結果をStringにキャストするのが現実的な気がしました。でも getModelObjectAsStringなんて名前のメソッドがあったら使っちゃうよなぁ。。。 検証したソースはこちら。 |