X-Content-Type-Options

当ページでは、HTTP通信に使われる「X-Content-Type-Options」ヘッダと、関連するブラウザの機能「MIMEスニッフィング」の概要について、図解資料を用いて具体的に説明しています。
 
 

X-Content-Type-Optionsヘッダの概要

X-Content-Type-Optionsヘッダとは、「Content-Type」ヘッダで指定されたMediaタイプ(MIMEタイプ)を強制的に適用するためのレスポンスヘッダ。
 
下の図を例に説明する。
下の図では、Webサーバからのレスポンスのコンテンツ「alert(’Hello’);」はJavaScriptなのに対し、Content-TypeヘッダにはPNG形式の画像データを意味する「image/png」が設定されている。
このようなコンテンツとContent-Type(Mediaタイプ)が一致しない状況下において、X-Content-Type-Optionsヘッダが設定されている場合、ブラウザはコンテンツをContent-Typeヘッダに指定されているMediaタイプ(この例の場合はJavaScriptではなくPNG画像データ)として処理する。
 

X-Content-Type-Optionsヘッダが必要な理由

ブラウザによるMIMEスニッフィングを抑制するためにX-Content-Type-Optionsヘッダを指定することが推奨されている。
リクエストで指定した値がレスポンスで返るようなリクエストにおいて、攻撃者がMIMEスニッフィング機能を悪用してMIMEタイプ(Mediaタイプ)を誤認識させ、スクリプトを実行することを防止できるようになる。

MIME スニッフィングとは

MIMEスニッフィングとは、ブラウザがコンテンツの Content-Typeヘッダで指定されているMediaタイプ(MIMEタイプ)が間違っていると判断した際に、正しい と推測したMediaタイプ(MIMEタイプ)を適用する機能。
 
⚠️
MIMEスニッフィング機能は、一部の古いバージョンのブラウザ(Internet Explorer 9以前など)でのみ対応している機能。 現在の最新バージョンの主要なブラウザでは機能しない。

X-Content-Type-Optionsヘッダの利用方法

レスポンスヘッダに以下を追記することで、リクエストで指定されたMediaタイプ(MIMEタイプ)とレスポンスデータのMediaタイプが異なる場合にその通信をブロックする。

関連・参考リンク