XSS
クロスサイトスクリプティング
ユーザの入力データを処理する Web アプリケーションや、Web ページを操作する JavaScript 等に存在する脆弱性を悪用し、ユーザの PC 上で不正なスクリプトを実行させる攻撃
閲覧者のリクエストに対して Web ページの内容を変化させる場合にセキュリティ上の問題が発生するもの
タグによるホームページの改ざん
<form> のような HTML タグは攻撃者に悪用させる可能性がある
cookie の漏洩
影響
本物のウェブサイト上に偽のウェブページが表示される
セッション情報などが取得されるとショッピングサイトなどで勝手に購入される可能性あり
攻撃手法
入力フィールド等を悪用し、他のサイトやリンク中に誘導した不正なスクリプトを挿入
主な目的
クレジットカード番号、口座番号、ユーザ ID、パスワード等を不正に入手
種類
対策
ユーザ ID やユーザ認証に係る情報(ユーザ ID、パスワード)は極力 Cookie に含めないようにし、セッション ID はセッション毎にランダムな値を生成することで推測できないようにする
漏えいを防ぐための Cookie の設定
Web アプリケーションでの対策
HTTP レスポンスヘッダの Content-Type フィールドに文字コードを指定する
Content-Type: text/html;charset=UTF-8
これを省略するとブラウザが独自の方法で文字コードを推定して表示処理を行い、攻撃者はこの挙動を悪用する
タグの属性値を必ずダブルクオートで囲む
タグの属性値等に含まれるメタキャラクタのエスケープ処理を行なう
サニタイズ / サニタイジング
table: HTML テキスト部のエスケープ処理の例
& &
< <
「>」 >
" "
' '
HTML タグの特定の属性等における注意事項
下記属性は上記の対策のみでは不十分
a タグの href 属性
img タグの src 属性
タグの style 属性
タグのイベント属性(イベントハンドラ)
スクリプトの文字列
基本的な対策は、これらの属性に対して利用者など外部からの入力値を出力しないようにすることが重要
例
href, src 属性
http:// or https:// で始まる文字列であることを確認する
style 属性
各種メタキャラクタのエスケープ処理を行なう
ブラウザの機能
HttpOnly 属性によるクッキーの漏えい対策
通信経路上での対策
DOM ベースの XSS 対策
createElement や createTextNode 等の DOM 操作用メソッドやプロパティを使用して Web ページを構築することである
詳細