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

MIMEスニッフィング ずは

💡 芋た目で䞭身を決め぀ける、ブラりザのおせっかい機胜
📌 このペヌゞのポむント
MIMEスニッフィングず nosniff による防止 サヌバヌ Content-Type: text/plain ファむルの䞭身 <script>alert(...)</script> 悪意あるスクリプト nosniff なし ブラりザ 䞭身を芗いお刀定 → HTMLずしお実行! XSS攻撃成功 nosniff あり サヌバヌ Content-Type: text/plain X-Content-Type-Options: nosniff ブラりザ Content-Type ã‚’ä¿¡é Œ → テキストずしお衚瀺 スクリプト 実行されない 攻撃を防止!
MIMEスニッフィングず nosniff ヘッダヌによる防止のむメヌゞ
ひよこ ひよこ

MIMEスニッフィングっお䜕なのファむルの匂いを嗅ぐの

ペンギン先生 ペンギン先生

面癜い衚珟だけど、実際にはブラりザがファむルの䞭身を芗いお「これは本圓は䜕のファむルだろう」っお刀定する動䜜のこずだよ。サヌバヌが「これはテキストです」っお蚀っおも、ブラりザが䞭身を芋お「いや、これHTMLじゃない」っお勝手に刀断しちゃうんだ

ひよこ ひよこ

なんでブラりザがそんなこずするのサヌバヌの蚀うこずを信じればいいのに

ペンギン先生 ペンギン先生

昔はサヌバヌの蚭定が雑で、Content-Typeヘッダヌを正しく付けないサヌバヌがたくさんあったんだ。だからブラりザが「サヌバヌの情報だけじゃ信甚できないな、自分で確認しよう」っお芪切心でやっおいたんだよ。でもその芪切心がセキュリティホヌルになっちゃったんだ

ひよこ ひよこ

どんな攻撃に䜿われるの

ペンギン先生 ペンギン先生

たずえば攻撃者が <script>alert('XSS')</script> ずいうコヌドを含むファむルを画像ずしおアップロヌドしたずする。サヌバヌは「これは画像です」っおContent-Typeを付けるけど、ブラりザがスニッフィングしお「䞭身はHTMLだ」っお刀断するず、スクリプトが実行されおXSS攻撃が成功しちゃうんだ

ひよこ ひよこ

こわいどうやっお防ぐの

ペンギン先生 ペンギン先生

サヌバヌのレスポンスに X-Content-Type-Options: nosniff ずいうヘッダヌを付けるだけでOKだよ。これがあるずブラりザは「サヌバヌが蚀う通りのContent-Typeで解釈したす、自分では掚枬したせん」っお動䜜になるんだ

ひよこ ひよこ

ヘッダヌ1぀付けるだけで解決するなんお簡単なんだね

ペンギン先生 ペンギン先生

そうなんだ。ただ泚意点があっお、nosniffを付ける堎合はContent-Type自䜓を正しく蚭定しおおく必芁があるよ。たずえばJavaScriptファむルに間違ったContent-Typeが付いおいるず、nosniffのせいで今床はスクリプトずしお読み蟌たれなくなっお機胜が壊れるこずがあるんだ

ひよこ ひよこ

正しく蚭定するのが倧事なんだね。最近のブラりザでもスニッフィングっお起きるの

ペンギン先生 ペンギン先生

䞻芁ブラりザは幎々スニッフィングの範囲を狭めおいお、特にscriptやstyleのコンテキストではnosniffなしでもスニッフィングしない方向に進んでいるよ。でもWHATWGのMIME Sniffing仕様では䟝然ずしおスニッフィングのアルゎリズムが定矩されおいお、完党になくなったわけじゃない。セキュリティヘッダヌの蚭定はやっおおくに越したこずはないね

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