Content-Type一覧・検索ツール
Content-Type一覧・検索ツールの使い方
このツールは、Content-Typeを一覧表示したものです。
左側の検索フィールドにContent-Type名・主な用途・日本語説明に含まれるキーワードを入力すると、一致するContent-Typeだけを表示することができます。
右側の「構造化データ」や「テキスト」などのグループフィルターボタンを押下すると、分類(グループ)ごとに絞り込んで表示することができます。「ALL」で絞り込みを解除します。
Content-Typeとは
Content-Typeは、HTTP通信で送信されるデータの種類を示すヘッダーです。
例えば、HTMLなら text/html、JSONなら application/json が使用されます。
よく使うContent-Type
・HTML
text/html
・JSON
application/json
・JavaScript
application/javascript
・画像
image/jpeg
image/png
image/gif
HTTPヘッダ例
・Content-Typeヘッダ例
Content-Type: application/json
・curl
curl -H "Content-Type: application/json"
文字化けを防ぐ「charset」の指定
Content-Typeには、データの種類だけでなく「文字エンコーディング(文字コード)」の情報も付与できます。
Content-Type: text/html; charset=UTF-8
日本語のサイトでこれが欠けていたり、実際のファイルと異なる文字コード(Shift-JISなど)が指定されていたりすると、「文字化け」が発生します。特別な理由がない限り UTF-8 を使用するのが鉄則です。
MIMEスニッフィングとは
Content-Typeに関連して、必ず知っておきたいのが「MIMEスニッフィング(MIME Sniffing)」というブラウザの機能と、それに伴うリスクです。
ブラウザの「お節介」が裏目に出る仕組み
通常、ブラウザはサーバーから送られてくる Content-Type を信じてデータを処理します。しかし、中には Content-Type が設定されていない、あるいは間違った設定で送られてくる古いWebサイトも存在します。
これに対処するため、ブラウザが「本当のデータ形式を推測(スニッフィング)する」機能を持っています。一見便利な機能ですが、これがセキュリティ上の大きな穴になることがあります。
悪意のある攻撃の例
例えば、攻撃者が「画像ファイル」にみせかけた、「悪意のあるJavaScript」を仕込んだファイルをアップロードしたとします。
- サーバーは、拡張子が
.jpgなのでContent-Type: image/jpegとして配信 - ブラウザはこれをスニッフィングによって画像ではなくスクリプトと勝手に判断して実行
- その結果、サイト閲覧者のクッキーが盗まれたり、不正な操作が行われたりする(XSS攻撃など)危険性がある
対策:X-Content-Type-Options ヘッダー
このリスクを防ぐための標準的な対策が、HTTPヘッダーに以下の一行を加えることです。
X-Content-Type-Options: nosniff
この設定をサーバーで行うことで、ブラウザに対して「Content-Typeで指定した形式以外として扱ってはいけない(スニッフィング禁止)」と強制することができます。
現在のWebサイト制作では、このヘッダーを設定しておくことがセキュリティのベストプラクティスとされています。
SVGファイルを利用したXSS(クロスサイトスクリプティング)攻撃
Content-Typeで image/svg+xml と指定されるSVGは、「画像でありながら、中身はXML(テキスト)であり、JavaScriptを実行できる」形式です。
SVGはベクターグラフィックスを記述するための言語ですが、仕様として <script> タグを含めることが許可されています。
もし、悪意のあるユーザーが以下のようなコードを埋め込んだSVGファイルをアップロードし、それを他のユーザーがブラウザで直接開いたり、特定の条件下で表示させたりすると、ブラウザ上でJavaScriptが実行されてしまいます。
<svg xmlns="http://www.w3.org/1999/xml" width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
<script>alert('XSS攻撃によりCookieが盗まれました: ' + document.cookie);</script>
</svg>
Content-Security-Policy (CSP)で「スクリプトの実行を禁止」する
X-Content-Type-Options: nosniff だけでは、SVG内部に仕込まれたスクリプトの実行を止めることはできません。
Content-Security-Policy(CSP)は、ブラウザに対して「このサイトで許可するコンテンツのソース(出所)」を細かく指示するHTTPヘッダーです。
SVGのXSS対策として、以下のようなヘッダーをサーバーから返却するように設定します。
Content-Security-Policy: script-src 'self';
このように設定すると、ブラウザは「自分のサイト(ドメイン)にある正規のスクリプトファイル以外、インラインのスクリプト(SVG内など)は一切実行しない」という極めて強い制限をかけます。
注意点
このツールはブラウザ上で処理を行うため、入力内容は外部サーバーに送信されません。

