FlawOpen

flawopen.com/XSS/Content-type sniffing

MIME sniffing XSS: MIME भ्रम browser तक कैसे पहुँचता है

संदर्भ पृष्ठ
संक्षिप्त उत्तर

ब्राउज़र response के Content-Type से तय करता है कि bytes को कैसे संभालना है। यदि ऐप user-controlled files को गलत या अनुपस्थित type के साथ serve करता है, तो MIME sniffing कुछ responses का व्यवहार बदल सकता है। सही type और X-Content-Type-Options: nosniff भेजें और uploads को ऐप के origin से अलग रखें। यह header browser interpretation का एक जोखिम घटाता है; यह files को sanitize नहीं करता और upload controls की जगह नहीं लेता।

Upload document boundary कैसे पार कर सकता है

मान लें ऐप user uploads स्वीकार करता है और फिर उन्हें अपने authenticated origin से अनुपस्थित या गलत Content-Type के साथ serve करता है। यदि browser response को HTML document मानता है, तो file का markup site origin में सक्रिय हो सकता है। फ़ाइल खोलने पर stored XSS या content confusion का जोखिम बनता है। Extension और upload request में बताया गया media type bytes के वास्तविक format का प्रमाण नहीं हैं।

Type स्पष्ट करें और downloads अलग रखें

जोखिमपूर्ण — अस्पष्ट headers के साथ user upload inline serve
HTTP/1.1 200 OK
Content-Type: application/octet-stream
// X-Content-Type-Options नहीं है
// authenticated app वाला ही origin
अधिक सुरक्षित — सही type, nosniff और अलग download
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Content-Disposition: attachment; filename="download.txt"

Server द्वारा चुना गया ऐसा Content-Type दें जो bytes से मेल खाता हो; uploader का दावा न अपनाएँ। X-Content-Type-Options: nosniff document responses के लिए MIME sniffing बंद करता है और गलत MIME type वाली script या stylesheet requests रोकता है। यह हर XSS का समाधान नहीं है: uploads को अलग origin से serve करें, download के लिए Content-Disposition: attachment प्राथमिकता दें, और size, authorization तथा file validation लागू करें। Inline image या media के लिए सत्यापित type लौटाएँ और browser का वास्तविक response जाँचें।

आम सवाल

क्या nosniff किसी भी uploaded file को सुरक्षित बना देता है?

नहीं। यह browser की MIME व्याख्या और script/style request checks नियंत्रित करता है, पर file को validate या sanitize नहीं करता, गलत Content-Type सुधारता नहीं, और same-origin upload को अलग नहीं करता। अविश्वसनीय files के लिए अलग origin और attachment downloads उपयोग करें।

संदर्भ

यह भी देखें क्रॉस-साइट स्क्रिप्टिंग (XSS, CWE-79): यह कैसे काम करती है और हर भाषा में इसे कैसे रोकें — flawopen.com CSP और output escaping: क्या दोनों चाहिए? क्या React का dangerouslySetInnerHTML सुरक्षित है? क्या innerHTML के लिए DOMPurify पर्याप्त है? क्या Markdown रेंडरिंग XSS से सुरक्षित है? क्या Svelte डिफ़ॉल्ट रूप से XSS से सुरक्षित है? क्या SVG upload में XSS का जोखिम है?