XSS対策としてサニタイズだけで十分?

XSSに対する対策として、入力パラメータに対するサニタイズ処理を行うのは一般的です。例えば、入力文字列をに含まれる&を&amp;に、ダブルクォートは&quot;に、<は&lt;、>は&gt;に変換するといった処理を行うことによって、HTMLの一部として扱われる文字列を無害な文字に変換します。但し、ある条件によってはサニタイズされていたとしても悪用される恐れのある場合があります。

例えば、以下のようにイベントハンドラーのparam部分にGET/POSTのパラメータが挿入される場合、入力文字列がサニタイズされていれば大丈夫でしょうか?

<input VALUE=”実行” onclick="escape(‘param’)" type="button" />

文字列として「’),alert(document.cookie);//」を挿入すると、シングルクォーテーションがサニタイズされて&#39;となり、以下のように表示されるはずです。サニタイズしてるからJavascriptは動かないはず・・・でも、ボタンを押すとJavascriptが実行されてポップアップが上がってきます。

<input VALUE=”実行” onclick="escape(‘param&#39;),alert(document.cookie);//)" type="button" />


シングルクォーテーションをマニュアル通りにサニタイズしているのであれば、上記のようなイベントハンドラーに埋め込まれたXSSの問題を回避することができません。場合によって様々なサニタイズパターン(上記の場合はシングルクォーテーションを全角に変換するとか)を作ることも対策としては有効ですが、複雑になってしまい逆に対策漏れが生じてしまう危険性がある為、パラメータにシングルクォーテーション等の不正な文字列が挿入された場合はエラー画面を表示する等の対策が一番無難な対策になります。
他にもいろいろとパターンがあるかもしれませんが、エラー画面を表示することによって大体対策できるように思います。みなさんのWebアプリケーションはいかがでしょう?

0 コメント:

コメントを投稿

 
©2009 H@ck3r's faith | by TNB