IISでクロスサイトスクリプティング セキュリティ対策についてまとめてみました。
目次
クロスサイトスクリプティング (XSS) とは
クロスサイトスクリプティングとは、Webアプリケーションの脆弱性もしくはそれを利用した攻撃のことです。
クロスサイトスクリプティング(XSS)とは、掲示板サイトやTwitterのような、ユーザからの入力内容をWebページに表示するWebアプリケーションにおいて、ウェブサイト(標的サイト)の脆弱性(XSS脆弱性)を利用した攻撃手法を指します。 攻撃者は、入力内容に、スクリプト付のリンクを貼る等の罠を仕掛けます。
・https://www.shadan-kun.com/blog/measure/1052/
クロスサイトスクリプティングを防ぐには、WEBサーバー側でセキュリティヘッダーを付けて対策を行います。
サーバからクライアントのブラウザへ送信されるHTTP レスポンスヘッダには、ブラウザ側のセキュリティ対策のふるまいを指定するヘッダが存在します。
ブラウザの種類により対応状況は異なるため、全てのブラウザに対し、有効ではありませんが、クロスサイトスクリプティングなどの脆弱性が存在した場合に、攻撃を回避または軽減できる可能性があります。
具体的には、次のヘッダが設定するとよいでしょう。
Strict-Transport-Security (HSTS) とは
HTTP の Strict-Transport-Security レスポンスヘッダー (しばしば HSTS と略されます) は、ウェブサイトがブラウザーに HTTP の代わりに HTTPS を用いて通信を行うよう指示するためのものです。
IIS で HSTS (HTTP Strict Transport Security) を有効にする方法は、以下の通りです。
web.configに以下を追加します。
1 2 3 4 5 6 7 |
<system.webServer> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000" /> </customHeaders> </httpProtocol> </system.webServer> |
Content-Security-Policy (CSP) とは
Content Security Policyは、スクリプト実行に関するセキュリティポリシーです。
サーバー管理者が CSP を利用する場合、実行を許可するスクリプトの正しいドメインをブラウザーに向けて指定することにより、 XSS の発生する箇所を削減・根絶することができます。 CSP をサポートするブラウザーは、サーバーから指定された許可リストに載っているドメインのスクリプトのみ実行し、他のスクリプトはすべて無視します (インラインスクリプトや HTML 属性値のイベントハンドラも無視する対象に含まれます)。
・https://developer.mozilla.org/ja/docs/Web/HTTP/CSP
IIS で Content-Security-Policy (CSP) を設定する方法は、以下の通りです。
サイト管理者が、すべてのコンテンツをサイト自身のドメイン (サブドメインを除く) から取得させたい場合
web.configに以下を追加します。
1 2 3 4 5 6 7 |
<system.webServer> <httpProtocol> <customHeaders> <add name="Content-Security-Policy" value="default-src 'self';" /> </customHeaders> </httpProtocol> </system.webServer> |
・https://content-security-policy.com/
IISの設定でHTTP応答ヘッダーに追加するのもよいでしょう。
以下のように設定します。
・https://urashita.com/archives/34077
X-Content-Type-Options:nosniff (XCTO) とは
コンテンツ内容を詐称し、XSSなどの攻撃が行われるリスクを防止します。
ブラウザはHTTP のレスポンスの Content-Type ヘッダに応じて、コンテンツをどのように処理するか決めますが、IE7のような古いブラウザではこのヘッダを無視するときがあります。
サーバから Content-Type: text/plain (ただのテキストファイル) として送られてきているにも関わらず、IE7 からアクセスすると、HTML として解釈されてしまいます。
text/plain に限らず、 image/jpeg などの画像の Content-Type が指定されているときにも起きます。
この挙動のことは、Content-Type sniffing と呼ばれています。
この挙動は Content-Type が間違っていてもコンテンツを正しく表示したい、という意図のもとに実装されているのですが、ウェブアプリケーションの脆弱性につながる恐れがある挙動としても知られており、対策が必要です。
この自動判別の挙動は IE8以降のブラウザでは
X-Content-Type-Options: nosniff
というヘッダを HTTP のレスポンスに入れることで無効にできます。
web.configに以下を追加します。
1 2 3 4 5 6 7 |
<system.webServer> <httpProtocol> <customHeaders> <add name="X-Content-Type-Options" value="nosniff"/> </customHeaders> </httpProtocol> </system.webServer> |
X-XSS-Protection (XSS Filter) とは
HTTP の X-XSS-Protection レスポンスヘッダーは Internet Explorer, Chrome, Safari の機能で、反射したクロスサイトスクリプティング (XSS) 攻撃を検出したときに、ページの読み込みを停止するためのものです。
・https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/X-XSS-Protection
IIS で X-XSS-Protection (XSS Filter) を設定する方法は、以下の通りです。
web.configに以下を追加します。
1 2 3 4 5 6 7 |
<system.webServer> <httpProtocol> <customHeaders> <add name="X-XSS-Protection" value="1; mode=block" /> </customHeaders> </httpProtocol> </system.webServer> |
IISの応答ヘッダーを使ってHSTS, CSP, XCTO, XSS Filterの対策
これまでweb.config を使ったHSTS, CSP, XCTO, XSS Filterの対策について説明しました。
これらの設定は、web.config ではなくて、IISのHTTP応答ヘッダーでも可能です。
IISマネージャーのHTTPレスポンスヘッダーGUIを使う方法は、以下の通りです。
・https://www.ipentec.com/document/windows-windows-server-iis-enable-http-strict-transport-security
コメント