クロスサイト・スクリプティング(XSS)その2
href属性などURLを保持する属性値、イベントハンドラのスクリプト、script要素内のXSS脆弱性はHTMLエスケープする以外に特別な対応が必要となる。
対象の場所ごとのXSS脆弱性に対するHTMLエスケープの概要をまとめた表が以下になる。
場所 | 説明 | 対応 |
---|---|---|
要素内容 (通常のテキスト) |
タグと文字参照が解釈される。 「<」で終端。 |
「<」と「&」を文字参照に変換。 |
属性値 | 文字参照が解釈される。 引用符で終端。 |
属性値を「"」で囲み、 「<」と「"」と「&」を文字参照に変換。 |
属性値 (URL) |
同上 | URLの形式を検査してから 属性値としてエスケープ |
イベントハンドラ | 同上 | JavaScriptとしてエスケープしてから 属性値としてエスケープ。 |
script要素内の 文字列リテラル |
タグも文字参照も解釈されない。 「</」により終端。 |
JavaScriptとしてのエスケープおよび 「</」が出現しないよう考慮。 |
URLである属性値
a要素のhref属性やimg要素、frame要素、iframe要素のsrc属性などはURLを属性値としてとる。このURLが外部から変更できる場合、URLとして
「javascript:<JavaScript式>」
という形式(JavaScriptスキーム)でJavaScriptを起動できる。
たとえば次のスクリプトを考える。
<a href="<? php echo htmlspecialchars($_GET['url']); ?>">ブックマーク</a>
このスクリプトを
「url=javascript:alert(document.cookie)」
というクエリストリングを指定して実行すると以下のHTMLが生成され、JavaScriptが実行される。
<a href="javascript:alert(document.cookie)">ブックマーク</a>
JavaScriptスキームによるXSSはHTMLのエスケープ漏れが原因ではなく、対策も異なる。
書式チェックとして、以下のURLのみを許容するようにチェックする。
- http:またはhttps:で始まる絶対URL
- スラッシュで始まる相対URL(絶対パス参照)
また、リンク先として任意のURLを指定できる場合、罠サイトに誘導される可能性がある。よって外部ドメインのURLである場合に次のいずれかの対策をするとよい。
- エラーとする。
- 外部ドメインへのリンクであることを利用者に注意喚起するためのクッションページを表示する。
参考文献:体系的に学ぶWebアプリケーションの作り方 4.3.2 クロスサイトスクリプティング(発展編)
![]() | 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 徳丸 浩 ソフトバンククリエイティブ 2011-03-03 売り上げランキング : 4070 Amazonで詳しく見る by G-Tools |
« クロスサイト・スクリプティング(XSS) | Main | クロスサイト・スクリプティング(XSS)その3 »
「プログラミング、技術情報」カテゴリの記事
- PHPStorm 2018.1.7 に更新(2018.12.09)
- 技術メモをQiitaに移行(2016.01.24)
- 正規表現メモ:ものぐさ(最小)マッチング(2015.11.29)
- BASE64にエンコード/デコードするバッチファイル(2015.11.23)
- Windows7の検索ボックスの検索条件指定(フォルダの除外など)(2015.08.16)
「PHP」カテゴリの記事
- PHPStorm 2018.1.7 に更新(2018.12.09)
- PHPメモ051:includeとrequireの使い分け(2015.06.19)
- CakePHPのインストール(2015.06.14)
- PHPからPDOでPostgreSQLに接続する(2015.06.09)
- PHPでメールを送信したら一部のOutlookで受信したメールでヘッダがおかしくなった(2015.05.31)
「セキュリティ」カテゴリの記事
- PHPメモ041:パスワードのSalt付きハッシュ値(2014.08.09)
- ファイルインクルード脆弱性(2014.05.18)
- ファイルダウンロードによるXSS その3(2014.03.27)
- ファイルダウンロードによるXSS その2(2014.03.23)
- ファイルダウンロードによるXSS その1(2014.02.24)
The comments to this entry are closed.
Comments