My Photo

« クロスサイト・スクリプティング(XSS) | Main | クロスサイト・スクリプティング(XSS)その3 »

September 16, 2013

クロスサイト・スクリプティング(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アプリケーションの作り方 脆弱性が生まれる原理と対策の実践体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩

ソフトバンククリエイティブ 2011-03-03
売り上げランキング : 4070

Amazonで詳しく見る
by G-Tools

« クロスサイト・スクリプティング(XSS) | Main | クロスサイト・スクリプティング(XSS)その3 »

プログラミング、技術情報」カテゴリの記事

PHP」カテゴリの記事

セキュリティ」カテゴリの記事

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference クロスサイト・スクリプティング(XSS)その2:

« クロスサイト・スクリプティング(XSS) | Main | クロスサイト・スクリプティング(XSS)その3 »

June 2021
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof