
DoubleClickからXSSの脆弱性が確認されたベンダーファイルリストの通知を受け取った後、サイトにベンダーファイルが設置されていないか確認を行いました。さらに、XSS (クロスサイトスクリプティング)を利用した攻撃等に対する防御用のX-Security ヘッダーを、運営するサイト全てに設置しました。X−Security ヘッダーは、XSS,ページフレーミング、コンテントスニッフィングなどの攻撃に対する防御するセキュリティ機能です。.htaccessにX-Security ヘッダーを追加することにより、サイトのセキュリティを強化することができます。
以下に3種類のX-Security ヘッダーの機能と設定方法について紹介します。
目次 - Table of Contents
XSS攻撃に対する防御: X-XSS-Protection
Firefoxを提供するmozillaのドキュメントに記載されるX-XSS-Protectionの説明を訳して以下に紹介します。
HTTPS X-XSS-Protection レスポンスヘッダーは、インターネットエクスプローラー、Chrome、Safariでクロスサイトスクリプティング(XSS)攻撃を検知すると、ページのロードを停止する機能です。これらの防御機能は、インラインJavaスクリプトを無効にする強力なコンテントセキュリティポリシー(Content-Security-Policy)を備える最新のブラウザーでは、大概は不必要なものですが、CSPをサポートしていない古いウェブブラウザーのユーザーの防御を提供します。
シンタックス
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>
0
XSS フィルタリングを無効にします。
1
XSS フィルタリングを有効にします。(通常ブラウザのデフォルト値です) クロスサイト スクリプティング 攻撃を検知した場合、ブラウザは、ページをサニタイズ(浄化)します。(安全ではない部分を取り除きます。)
1;mode=block
XSS フィルタリングを有効にします。ページをサニタイズするのではなく、ブラウザはXSS攻撃を検知した場合、ページのレンダリング(描写)を止めます。
1;report=<reporting-URI> (Chromium のみ)
XSS フィルタリングを有効にします。クロスサイト スクリプティング 攻撃を検知した場合、ブラウザはページを浄化し、違反報告を行います。CSPの report-uri ディレクティブ機能を使用して、レポートを送付します。
例
XSS攻撃の兆候が見られた時、ページのロードをブロックする。
X-XSS-Protection: 1; mode=block
PHP:
header(“X-XSS-Protection: 1; mode=block”);
Apache (.htaccess)
<IfModule mod_headers.c>
Header set X-XSS-Protection “1; mode=block”
</IfModule>
値に”0″を入れると、XSSのプロティクションが無効になります。ご注意下さい。
対応ブラウザ
Chrome, Edge, IE (8から), Opera, Safari
Firefoxは、対応していません。Firefoxの場合は、CSPで防御するアプローチを取っていると思われます。
ページフレーミングとクリックジャッキングに対する防御: X-Frame-Options
mozillaのドキュメントに記載されるX-Frame-Optionsの説明を訳して以下に紹介します。
X-Frame-Options HTTP レスポンスヘッダーは、ブラウザは<frame>, <iframe>, <object>が含まれているページの描写(レンダー)を許可すべきか否かを指示する事に使用します。 本機能を使用することでサイトは、コンテントを他のサイトに埋め込まれること防止することで、クリックジャッキングの攻撃を避けることができます。
この追加されるセキュリティ機能は、 ドキュメントにアクセスするユーザーが、X-Frame-Options をサポートするブラウザを使用している場合のみ可能となります。
シンタックス
X-Frame-Optionsには、3種類のディレクティブがあります。
DENY
ページはサイトがどのように試みても、フレーム内に表示をすることができなくなります。
SAMEORIGIN
ページは、ページと同じオリジナルの物のみフレーム内に表示することができます。このオプションをトップレベル、ペアレント、または全てのチェーンに導入するか否かはブラウザ・ベンダーの判断に任せる仕様となっています。詳しくは、ブラウザの互換性をご参照下さい。
ALLOW-FROM uri
ぺーいは指定されたオリジンのみフレーム内に表示することができます。
例
meta tagで設定することはできません!例:<meta http-equiv=”X-Frame-Options” content=”deny”> は何も機能しません。ご使用されないで下さい。下記の例のように、X-Frame-Options をHTTP ヘッダーに設定することでのみ動作します。
Apacheでの設定
Apacheで、X-Frame-Options ヘッダーを全てのページに送るように設定する場合は、以下の記述をサイトのコンフィギュレーションに加えてください。
Header always set X-Frame-Options SAMEORIGIN
Apacheで、X-Frame-Options にDENY (無効 / 拒否)を設定にする場合は、以下の記述をサイトのコンフィギュレーションに加えてください。
Header set X-Frame-Options DENY
Apacheで、X-Frame-Options に 特定のホストに ALLOW-FROM を設定する場合は、以下の記述をサイトのコンフィギュレーションに加えてください。
Header set X-Frame-Options “ALLOW-FROM https://example.com/”
nginxでの設定
nginxに X-Frame-Options ヘッダーを全てのページに送るように設定する場合は、以下の記述をhttp, サーバー、またはロケーション コンフィギュレーションに加えてください。
add_header X-Frame-Options SAMEORIGIN;
仕様
ブラウザ互換性
Chrome, Edge?, Firefox (18から), インターネットエクスプローラー(8から)、Opera, Safari
コンテント-スニッフィングに対する防御: X-Content-Type-Options
mozillaのドキュメントに記載されるX-Content-Type-Optionsの説明を訳して以下に紹介します。
X-Content-Type-Options レスポンス HTTP ヘッダーは、Content−Type ヘッダー内で指定されるMIME typesは、変更とフォローすべきではないことを示すサーバーによって使用されるマーカーです。この機能によって、MIME type スニッフィングのオプトアウトが可能となります。
このヘッダーは、、実行不可のMIME typeを実行可能なMIME typeに変更するなどのコンテントスニッフィングが発生することをウェブマスターがブロックする方法として、マイクロソフトの IE 8 で導入されました。以降、MIME スニッフィングはそれ程攻撃的なアルゴリズムではありませんが、他のブラウザでも導入されるようになりました。
サイトセキュリティのテスターは、このヘッダーが設定されていることが通常であると考えています。
シンタックス
ディレクティブ
nosniff
リクエストタイプが以下の場合、リクエストをブロックします。
– “style” とMIME typeが、”text/css” でない。
– または、”script” とMIME typeが、JavaScript MIME typeでない。
ブラウザーの互換性
Chrome, Edge, Firefox (50), Internet Explorer (8), Opera, Safari
3つの X-Security ヘッダーを組み合わせた設置例
上で紹介した3つの X-Security ヘッダーを組み合わせた設置例です。以下のコード記述を .htacess のファイルに追加して、サイトのルートディレクトリに設置します。
<IfModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" Header always append X-Frame-Options SAMEORIGIN Header set X-Content-Type-Options nosniff </IfModule>
説明は長くなりましたが、基本的にやることは上記のコードを.htaccessに追加するだけです。それだけで、XSSに対する防御を含めてサイトのセキュリティを強化することができます。
コメントを残す(承認後表示されます)