クロスサイトスクリプティングについて

Uncategorized

クロスサイトスクリプティング(以下XSS)とは
Webアプリケーションの脆弱性を悪用し、利用者のブラウザで不正なスクリプトを実行させる攻撃で、主に3つに分類されます
>格納型XSS
不正なスクリプトをWebアプリケーションに組み込むタイプ
>反射型XSS
スクリプトを含むURLを作成し、そのURLをクリックさせる
>DOMベースXSS
DOMとはHTMLやXMLのオブジェクトを操作する為の仕組みであり
それを悪用するXSS

XSSの3つの対策
対策の方も以下の3つに分けることができます
1 HTMLテキストの入力を許可する場合の対策
具体的な場面として、ブログを投稿する際にHTMLタグを使用するなどの
比較的自由度が高いテキストを作成できるWebアプリケーションが該当すると思います
>ホワイトリスト形式でのテキストチェックを行う
事前に、許可するHTMLタグを定義(ホワイトリスト)しておき
ホワイトリストに無いタグが使用されていたら、エラー等で拒否する
>スクリプトに該当しうる文字列のエスケープ
「<script>」や「javascript:」等の文字列に、「<xscript>」「xjavascript:」といった様に
余計な文字を付け加えることでスクリプトとしての解釈をさせないようにする。

2 HTMLテキストの入力を許可しない場合の対策
上記の 1 と違い、単純に文字列入力するだけの場合
> ユーザからの入力値に対しチェックを行う
ユーザからの入力値に対し、特定の文字が含まれていないかをチェックします
具体的には < > & ” ‘ と言った文字が入っていた場合、これらに対しエスケープ処理を施します
例えば < は &lt; に変換、& は &amp; に変換してからレスポンスします。
>URL出力の際にはスキームを http か https に固定する
スキームとは https://example.com の https の部分で
ここに javascript:alert(“XSS”) とすることでスクリプトが実行されてしまいます
そのため、URLを出力する際にはスキームをチェックした方が良いと思われます

3 Webアプリに依らない共通的な対策
>HTTPレスポンスヘッダを用いる
XSS対策として有効となり得るレスポンスヘッダを利用する方法です
・Content-Typeフィールドに文字コードを設定する
「Content-Type: text/html; charset=UTF-8」の様に、UTF-8などの文字コードを設定します
設定しないとブラウザによっては、HTMLに特定の文字列が含まれていることで
特定の文字コードとして処理される挙動を持つものもあるため、この挙動を逆手に取って
悪意あるスクリプトを実行させられてしまう可能性があります
・X-XSS-Protectionの有効化
X-XSS-Protectionは、有効化することでブラウザがXSSの検知、防御を試みる仕組みです
「X-XSS-Protection: 1; mode=block」の様にレスポンスヘッダに含めることで
無効化されているブラウザでも有効化することが可能です。
・Content Security Policy(CSP)の利用
CSPは様々な機能を持っていますが、その中の reflected-xssディレクティブ を有効化することで
反射型XSSの実行を防げる可能性があります


まとめ
XSSは今もなお被害報告が多い脆弱性の1つです。
特にユーザからの入力を受け付けるような場合、入力値を的確にチェックする必要があります
IPAの「安全なWebサイトの作り方」にも様々な防御策が記述されています
こちらも参考にされると良いと思います。

コメント

タイトルとURLをコピーしました