情報処理のWeb教科書―IPA情報処理試験対策のお供に!

クロスサイトスクリプティング(XSS)―対策はサニタイジング。

トップ 情報処理の知識体系 テクノロジ系 技術要素 セキュリティ 情報セキュリティとは 攻撃手法 サイバー攻撃の種類 クロスサイトスクリプティング(XSS)

クロスサイトスクリプティング(XSS)とは、Webサイトに利用者を誘導して、Webサイトの入力データ処理の欠陥を悪用し、 利用者にブラウザで悪意のあるスクリプトを実行させる攻撃です。XSSの対策はサニタイジング処理が基本となります。

▲記事トップへ

目次

この記事の目次です。

1. クロスサイトスクリプティング(XSS)とは

2. クロスサイトスクリプティング対策

3. サニタイジング

クロスサイトスクリプティングに関連したIPA情報処理試験の過去問題

もっと知識を広げるための参考

更新履歴

1. クロスサイトスクリプティング(XSS)とは

クロスサイトスクリプティングとは、Webサイトに利用者を誘導して、Webサイトの入力データ処理の欠陥を悪用し、 利用者にブラウザで悪意のあるスクリプトを実行させる攻撃です。

XSS攻撃の主な目的

攻撃の主な目的は以下になります。

XSS攻撃の手口

Webアプリケーションのフォームのフィールドに、 悪意のあるJavaScriptコードを含んだデータを入力するなどしてWebサイトの入力データ処理の欠陥を悪用してスクリプトが実行される仕掛けをつくります。 仕掛けを作ったURLを巧みに誘導して被害者に実行させます。

2. クロスサイトスクリプティング対策

クロスサイトスクリプティング対策には、悪意のある入力コードのサニタイジング処理を行うのが基本です。 Webページに入力されたデータの出力データが、HTMLタグとして解釈されないように処理を行ってサニタイジングするのが有効です。

基本的には「>」「<」「"」「'」の文字列を他の文字に置き換えるのが対策となりますが、 URLの「data:<base64コードなど>」やJavaScriptライブラリの機能の悪用など対策が行えない場合があります。

アプリケーションの作りなどの要因で攻撃パターンの考慮漏れやサニタイジング処理の漏れがある恐れがあり、 Cookie情報が摂取されないようにするHTTPレスポンスヘッダのセキュリティ設定やWebアプリケーションファイアウォール(WAF)など多層で対策するべきです。

レスポンスヘッダの設定:X-XSS-Protection

HTTPレスポンスヘッダ―のパラメータの「X-XSS-Protection」を設定することで、ブラウザのクロスサイトスクリプティング防止機能を有効にするよう指示が行えます。

設定する場合、利用Webサーバやプログラムなど環境に合わせて設定方法を調べる必要があります。

Apache HTTP Serverで設定する場合

Apache HTTP Serverで設定する場合は、設定ファイルのhttpd.confあるいは.htaccessで設定する場合は「Header always append X-XSS-Protection: "1; mode=block"」を記述します。

IISで設定する場合

IISで設定する場合は以下の方法があります。

管理ツールを使用する場合
  1. Webサーバのデスクトップからスタート画面を開き、「管理ツール」をクリック
  2. 「インターネット インフォメーション サービス(IIS)マネージャー」をクリック
  3. 左の「接続」リストから、対象のホームページを選択
  4. 「HTTP応答ヘッダー」をクリック
  5. 右の「操作」リストから、「追加」をクリック
  6. 「名前」「値」を入力し、「OK」を押下

    名前:X-XSS-Protection/値:1; mode=block

web.configで設定する場合

以下の設定を「web.config」として保存し、公開領域に置きます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="X-XSS-Protection" value="1; mode=block" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

レスポンスヘッダの設定:X-Content-Type-Options

IEでは、画像ファイルなどもHTMLと判定するスニッフという処理があり、HTMLとして認識しないように設定しておくと安心です。 X-Content-Type-Optionsでブラウザにスニッフしない指示が与えられます。

設定する場合、利用Webサーバやプログラムなど環境に合わせて設定方法を調べる必要があります。

Apache HTTP Serverで設定する場合

Apache HTTP Serverで設定する場合は、設定ファイルのhttpd.confあるいは.htaccessで設定する場合は「Header always append X-Content-Type-Options: "nosniff"」を記述します。

IISで設定する場合

IISで設定する場合は以下の方法があります。

管理ツールを使用する場合
  1. Webサーバのデスクトップからスタート画面を開き、「管理ツール」をクリック
  2. 「インターネット インフォメーション サービス(IIS)マネージャー」をクリック
  3. 左の「接続」リストから、対象のホームページを選択
  4. 「HTTP応答ヘッダー」をクリック
  5. 右の「操作」リストから、「追加」をクリック
  6. 「名前」「値」を入力し、「OK」を押下

    名前:X-Content-Type-Options/値:nosniff

web.configで設定する場合

以下の設定を「web.config」として保存し、公開領域に置きます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="X-Content-Type-Options" value="nosniff" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

参考)HTTPレスポンスヘッダのセキュリティ設定

HTTPレスポンスヘッダにセキュリティ対策用のパラメータがあります。 Set-Cookieのsecure、httplonlyなどHTTPレスポンスヘッダのセキュリティ設定一覧をまとめています。

詳細

3. サニタイジング

レスポンスヘッダの設定やWAFなどはすり抜けるケースがありますので、基本的にはアプリケーション側でサニタイジングしておく必要があります。 サニタイジングとは、英語のsanitizingで「無害化」「無害化する」という意味の用語です。

たとえば、XSSのサニタイジングとしては、Webページに入力されたデータの出力データが、HTMLタグとして解釈されないように 「>」「<」「"」「'」の文字列を他の文字に置き換えて、害が発生しないようにすることをサニタイジングといいます。

PHPのアプリケーションの場合の対策例:htmlspecialchars()関数

PHPの場合は、htmlspecialchars()関数で入力値をページに出力する値をエスケープできます。

対策前の例

<?php echo $value ?>

対策後の例

<?php echo htmlspecialchars($value) ?>

WordPress

WordPressはPHPで実装されたCMSです。 WordPressのテーマなどを実装する場合は、XSSを意識したコーディングが必要です。

PHPなのでhtmlspecialchars()関数が利用できますが、WordPress独自のesc_html()関数が利用できます。

クロスサイトスクリプティングに関連したIPA情報処理試験の過去問題

以下ではクロスサイトスクリプティングに関連したIPA情報処理試験の過去問とその解説をまとめています。

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

各試験の問題と解説

ランダム出題・採点アプリ

プログラミング

スポンサーリンク