コンテンツスニッフィング

コンテンツスニッフィング（英: Content sniffing）、またはメディアタイプスニッフィング（英:media type sniffing）、MIMEスニッフィング（英:MIME sniffing）とは、バイトストリームの内容を検査し、その中のデータのファイルフォーマットを推測しようとする方法である。

コンテンツスニッフィングは一般的に、ファイルを正しく判別するために必要となる正確なメタデータが欠如しているのを補うために行われる。

コンテンツスニッフィングの手法は、多くのファイルフォーマットに見られる手法を冗長的に組み合わせる。ファイルシグネチャやマジックナンバー、ヒューリスティック、バイト頻度やn-gramテーブルの使用、およびベイズ推定などの手法がある。

 MIMEスニッフィング 
Multipurpose Internet Mail Extensions (MIME) スニッフィングは、ウェブコンテンツのMIMEタイプを正しく信号で送らないウェブサイトが正しく表示されるのを助ける試みとして、Internet Explorerをなどのウェブブラウザでかつて使用されていた手法である。この手法は、深刻なセキュリティ上の脆弱性に利用されることになり使用されなくなった。MIMEスニッフィングアルゴリズムを悪用することで、サイト運営者やユーザーが予期しない操作（クロスサイトスクリプティングなど）を攻撃者が実行できるような方法で、ブラウザにデータを解釈させることが可能になるからである。さらに、コンテンツに正しくMIMEタイプを割り当てていないサイトをブラウザで正しく動作するように見せかけることで、資料の正しいラベル付けに失敗することも多かった。その結果、これらのサイトが機能するためにコンテンツスニッフィングが必要となり、ウェブ標準およびセキュリティのベストプラクティスとの非互換性の悪循環を生み出している。

HTML5にはメディアタイプスニッフィングが存在し、セキュリティの要件と、MIMEタイプデータが欠落または不正確なウェブコンテンツとの後方互換性の必要性とのバランスを取ろうとしている。これは、実装間で単一の明確に定義された決定論的な動作セットを実装するために使用できる正確な仕様を提供することを試みている。

UNIXの コマンドは、コンテンツスニッフィングアプリケーションと見なすことができる。

 文字セットスニッフィング 
多くのブラウザは、ファイルの種類が分かっていても文字コードを自動判別しようとします。この手法は「文字セットスニッフィングまたはコードページスニッフィング」と呼ばれますが、実はセキュリティ制限の回避に悪用されることがある。

例えば、Internet Explorer 7は、HTMLをUTF-7でエンコードされているとブラウザにご認識させることで、ポリシーを回避し、JScriptを実行するよう攻撃が可能であった。このバグは、UTF-7はASCII文字を別の表記で記述できるため、この脆弱性がより深刻化した。

ほとんどの場合、大半の文字コードはASCII文字を特殊な形で扱わないため、文字セットスニッフィングはそれほど危険ではない。スクリプト言語やマークアップ言語がASCII中心であるため、ASCIIのレパートリー外の文字を使用してセキュリティ境界を回避することはより困難であり、文字セットの誤解釈は文字化け程度で終わることが多い。

 脚注 

 外部リンク 

 X-Content-Type-Options header
 MIME Sniffing Standard