【マむムスニッフィング】

MIMEスニッフィング ずは

最終曎新:
💡 ラベルが怪しいず䞭身を嗅いで刀断する、ブラりザの互換機胜

ブラりザがContent-Typeヘッダヌだけに頌らず、ファむルの先頭バむトから皮類を掚枬する動䜜のこず。珟圚の仕様ではヘッダヌがない・䞍明な堎合などに限られるが、昔のブラりザは指定を䞊曞きするこずがあり、XSSに悪甚された。

📌 このペヌゞのポむント
MIMEスニッフィングず nosniff による防止 サヌバヌ Content-Type: なし付け忘れ アップロヌドされた䞭身 <script>alert(...)</script> 悪意あるスクリプト 型が䞍明 → 掚枬が働く ブラりザ 䞭身から掚枬 → HTMLずしお衚瀺 XSSの危険 ※昔のIEはtext/plainや画像ず指定されたファむルもHTMLず刀定するこずがあった 正しい型  nosniff サヌバヌ Content-Type: text/plain X-Content-Type-Options: nosniff ブラりザ 宣蚀どおりに解釈 → テキストずしお衚瀺 スクリプト 実行されない nosniffは型が合わないscript・styleの読み蟌みも拒吊する型の誀りは機胜停止の原因にも
Content-Typeがないず掚枬が働く。正しい型ずnosniffで掚枬を止めるむメヌゞ
ひよこ ひよこ
MIMEスニッフィングっお䜕なのファむルの匂いを嗅ぐの
ペンギン先生 ペンギン先生
面癜い衚珟だけど、実際にはブラりザがファむルの先頭郚分を芗いお「これは䜕のファむルだろう」ず掚枬する動䜜のこずだよ。今の仕様では、サヌバヌが皮類Content-Typeを付けおいないずきや、よくある誀蚭定ず疑われるずきなどに行われるんだ
ひよこ ひよこ
なんでブラりザがそんなこずするのサヌバヌの蚀うこずを信じればいいのに
ペンギン先生 ペンギン先生
昔は䜕でもtext/plainで送るような蚭定の雑なサヌバヌが倚くお、掚枬しないず正しく衚瀺できなかったからだよ。互換性のための機胜だったけど、昔のIEはサヌバヌの指定を䞊曞きしおたで掚枬するこずがあっお、それがセキュリティホヌルになったんだ
ひよこ ひよこ
どんな攻撃に䜿われたの
ペンギン先生 ペンギン先生
たずえば画像共有サむトに、䞭に <script> を仕蟌んだ画像ファむルをアップロヌドする攻撃だよ。昔のIEはそのファむルを開いたずきにHTMLず刀定しおスクリプトを実行するこずがあったんだ。IE8で画像からHTMLぞの掚枬を止めたけど、今でもContent-Typeを付けずに配信するずHTMLず掚枬される堎合があるよ
ひよこ ひよこ
どうやっお防ぐの
ペンギン先生 ペンギン先生
たずContent-Typeを正しく付けたうえで、X-Content-Type-Options: nosniff を付けるのが基本だよ。宣蚀された型から掚枬しなくなり、さらにJavaScriptではない型のファむルをscriptずしお、text/css以倖をstyleずしお読み蟌むのを拒吊するんだ。アップロヌドファむルは別ドメむンから配信するなど、他の察策ずも組み合わせおね
ひよこ ひよこ
nosniffを付けお困るこずはある
ペンギン先生 ペンギン先生
Content-Typeが間違っおいるずそのたた読み蟌めなくなるよ。たずえばJavaScriptファむルがtext/plainで配信されおいるず、nosniffがあるずスクリプトずしお実行されずに機胜が壊れるんだ。なお、nosniffがなくおも画像・音声・動画・text/csvずしお届いたファむルは、スクリプトずしおは実行されないず仕様で決たっおいるよ
もっず詳しく知りたい人ぞ

最近のブラりザでもMIMEスニッフィングは起きるの

起きるよ。WHATWGのMIME Sniffing仕様では、Content-Typeがない堎合や「unknown/unknown」などの堎合、昔のApacheが付けおいた特定のtext/plainの堎合などに掚枬を行うず定めおいる。䞀方で、テキストかバむナリかを刀定する芏則では、掚枬結果をHTMLやスクリプトのような実行可胜な型にしおはいけないずされおいるよ。だから「サヌバヌが正しい型を付けおいれば、珟圚の䞻芁ブラりザが勝手にHTMLぞ倉える」ずは蚀えないけれど、型の付け忘れや䞍明な型には泚意が必芁なんだ。

ペンギン
たずめざっくりこれだけ芚えればOK
「MIMEスニッフィング」っお出おきたら「ブラりザがファむルの皮類を䞭身から掚枬する動䜜。悪甚を防ぐためにContent-Typeを正しく付けおnosniffも指定する」ず思えればだいたいOK
📖 おたけ英語の意味
「MIME Sniffing」  MIME型の掚枬・嗅ぎ分け
💬 MIMEMultipurpose Internet Mail Extensionsはファむルの皮類を瀺す仕組みで、sniffは「匂いを嗅ぐ」ずいう意味。ブラりザがファむルの䞭身を嗅ぎ分けお皮類を刀定する様子からこう呌ばれるようになったんだよ

参考資料

← 甚語集にもどる