X-Content-Type-Options

概要

X-Content-Type-Optionsとは、HTTPヘッダのフィールド(項目)の一つで、Content-Typeフィールドで指定したメディアタイプを強制適用するもの。WebサーバからWebブラウザへの応答(HTTPレスポンス)の中で用いられる。

HTTPではヘッダー中で「Content-Type」を指定することにより送信するデータの種類や形式(メディアタイプ)を伝達するが、ブラウザ側ではこれに従わずに伝送されてきたデータ本体を調べてメディアタイプを推測する「MIMEスニッフィング」を行なう場合がある。

これはメディアタイプの指定が無い場合やサーバ管理者が指定を誤った場合などでもコンテンツを適切に処理できるようにするために行われ、ファイル名の拡張子やデータ本体に含まれる特徴的なパターンなどからデータ形式を推測する。Content-Typeが指定されている場合でも無視する。

しかし、この仕様を悪用して、攻撃者がサーバから伝送するファイルの一部にわざと形式を誤認させるような内容を忍び込ませ、本来はプログラムとして実行できないはずのファイル形式を読み込んで不正なスクリプトを実行させるといった攻撃手法(XSSの一種)が編み出された。

X-Content-Type-Optionsはこれを防止するために追加されたヘッダー項目で、「X-Content-Type-Options: nosniff」と指定する。これが含まれる場合はブラウザ側でMIMEスニッフィングは行わず、サーバがContent-Typeで指定したメディアタイプに必ず従うようになる。

(2022.3.3更新)

HTTPの用語一覧