カテゴリー:
セキュリティ
閲覧数:572 配信日:2014-05-21 23:05
攻撃と被害の流れ
1.攻撃
・XSSの脆弱性があるページに、悪い人がスクリプト(多くの場合Javascript)を埋め込む
2.被害
・そのページを開いたユーザが攻撃を受けてしまう
クロスサイトスクリプティング処理を実行するタイミング
入力で処理しても良い?
・エスケープ処理のタイミングは入力データのチェック時ではなく、HTMLの生成時(出力時)に行うべき
・いろんな入力源から入り込んでくるデータを漏れなくエスケープ処理できるから
小さなプログラム
・どちらでも良い
・数行程度のプログラムなら、入力直後で処理するのも、HTML出力の直前で処理するのも同じこと
大規模プログラム
・入力から出力までのデータフローは長くて複雑なパス(道のり)を構成
・真ん中あたりで処理するのは最悪
・処理されているかいないかの確認が難しくなるから
・入力直後か出力直前
入力直後のエスケープ処理が良くない理由
・入力時点では値の目的が不明
・「<」を「<」に変換する必要があるのは、その値がHTML出力で使われるという理由から
・その入力値が、もしSQL文の一部として使われるならば、SQLインジェクション対策をしなくてはならない。具体的には「'」の文字を処理
・SQL文にも使われるしHTML出力にも使われるなら、両方処理する必要がある
・入力直後でサニタイズすると、両方処置した値がHTML出力に使われたとき、無駄に「'」がエスケープされて「''」とか「\'」と表示されてしまうという、マヌケなことが起きる
・「外部からの入力に依存していない値については(セキュリティ上問題ないので)エスケープを省略する」という発想は、利益がない(いまどきそんな省略で性能に変化が出ることはない)ばかりか、メンテナンス性を悪くし、脆弱性の原因となります。
・クロスサイトスクリプティング脆弱性を排除するには、HTML文字列を書き出す部分で、「<」などを「<」などに変換(エスケープ処理)すればよい
対策は3種類
1.HTMLエスケープ
2.URL属性部分の対応
3.イベントハンドラ属性の対応