Pocket

X-Content-Type-Options 「nosniff」 対策

  • add this entry to hatena bookmark

OWASP ZAP(Zed Attack Proxy)でペネトレーションテストを行ったWebサイトにて、以下のアラートが検出された。

アラート X-Content-Type-Options header missing
Risk Low
Reliability Warning
Description The Anti-MIME-Sniffing header X-Content-Type-Options was not set to ‘nosniff’
Solution This check is specific to Internet Explorer 8 and Google Chrome. Ensure each page sets a Content-Type header and the X-CONTENT-TYPE-OPTIONS if the Content-Type header is unknown

リスクは「Low」らしいが、かなりの数で検出されてしまい煩わしいので対策を行う事にした。

まず、どんな内容のアラートか調べる為にググってみた。このオプション自体はMSが独自で定義している項目で、Content-Typeだけでファイルタイプを決定するのではなく、コンテンツ内容などもsniffして(調べて)ファイルタイプを決めており、その結果としてXSSが発生することがある、という内容だった。

Webページ設定

対策として、対象サイトであるPHPでコーディングしているWebページに以下の1行を投入した。

 <? header("X-Content-Type-Options: nosniff"); ?>

その後、対策効果を確認するために、あらためて、OWASP ZAP(Zed Attack Proxy)で検査を実施。

上記のコーディングを追加した該当Webページ自体では「X-Content-Type-Options header missing」の脆弱性は消えた!

しかし、該当Webページに含まれているCSSファイルやJSファイル、画像ファイルでは、引き続き同じアラートが検出されてしまう。

これは、IEが、画像ファイルなどもHTMLと判定してしまう事がある為であり、どうやら、Webサーバ(apache)単位で本脆弱性に対する対策用の設定(画像ファイルなどのHTML以外のファイルをIEがHTMLとして認識しないようにする設定)が必要らしい。

apache設定

引き続きググってみると、以下の情報を発見。mod_headersで出来るとの事。

X-Content-Type-Options: nosniffのつけ方

mod_headerモジュール自体は既にapacheにロードされているので、以下を設定をhttpd.confに追加する。

Header always set X-Content-Type-Options nosniff

※ always を付けると、favicon.ico のリクエストによって同じアラートが検出される事を防げる。

apacheを再起動後に、OWASP ZAP(Zed Attack Proxy)で検査を実施すると、ついに、このアラートは検出されなくなった。

念のため、本対策が施された後に、画像ファイルに対するレスポンスヘッダを確認してみると、以下になっていた。

HTTP/1.1 200 OK
Date: (省略)
Server: (省略)
Last-Modified: (省略)
ETag: (省略)
Accept-Ranges: bytes
Content-Length: 4410
X-Content-Type-Options: nosniff
Content-Type: image/png

対策完了!

補足情報

以下の情報によると、X-Content-Type-Options 対策あらゆるコンテンツに必要との事です。

http://d.hatena.ne.jp/hasegawayosuke/20110106/p1

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。