概要
クロスサイトスクリプティング(Cross Site Scripting:XSS)とは、攻撃者が「脆弱なWebアプリケーション」に悪意のあるスクリプトを埋め込み、そのアプリケーションを閲覧したユーザーのブラウザ上でスクリプトが実行されてしまう脆弱性および攻撃手法です。
被害
実際の被害の具体例としては以下のようなものがあげられます。
- セッションハイジャック
- クッキーやセッションIDを盗み、アカウントを丸ごと乗っ取る。
- 例えば、攻撃者が埋め込んだスクリプトでユーザーのセッションID(Cookie)を窃取し、被害者になりすましてサイトに不正ログインする攻撃など。
- 情報窃取
- フォーム入力値や閲覧中の機密情報を取得する。
- 例えば、XSSで侵入したスクリプトが、フォームの入力データやページ内の機密情報(氏名、メールアドレス、クレジットカード番号など)を読み取り、外部へ送信する、など。
- フィッシング詐欺
- 正規サイトに見せかけたフォームを表示し、利用者に入力させる。
- 例えば、本物のサイトに見せかけた偽のログインフォームや認証ポップアップを動的生成し、ユーザーに認証情報を入力させて盗む、など。
対策
対策としては以下のようなものがあげられます。根本対策を行ったうえで補助的な対策も組み合わせる必要があります。
根本対策
- 入力値の適切なエスケープ/サニタイズ
- 不正なスクリプトの無効化や入力値の制限をおこなう。具体的には以下のような例が挙げられる。
- HTMLコンテキスト:
<
,>
,&
,"
,'
などをエスケープ - JavaScriptコンテキスト:文字列結合部分をエスケープ
- URLコンテキスト
:encodeURIComponent()
等でエンコード
- HTMLコンテキスト:
- 不正なスクリプトの無効化や入力値の制限をおこなう。具体的には以下のような例が挙げられる。
- コンテンツセキュリティポリシー(CSP)の導入
Content-Security-Policy
ヘッダで許可スクリプトのソースを制限するなど、外部スクリプトの読み込み元を限定し、インラインスクリプトや未承認のスクリプト実行を防止する。
- セキュアなクッキー設定
- クッキーを HTTPS 接続でのみ送信させたり、JavaScript(
document.cookie
)からのクッキー参照を禁止することで、セッション管理を強化する。
- クッキーを HTTPS 接続でのみ送信させたり、JavaScript(
補助的対策
- セキュリティテストの自動化・定期実施
- 静的解析(コードレベルで脆弱箇所を検出)や、動的解析(実行中アプリに対するペネトレーションテスト)などを実行する。
- WAF(Web Application Firewall)導入
- 運営側でWAFを導入し攻撃パターンの検出やブロックを行う