flawopen.com/XSS/Content-type sniffing
XSS akibat MIME sniffing: bagaimana kebingungan MIME mencapai browser
Browser memakai Content-Type respons untuk menentukan cara menangani byte-nya. Jika aplikasi menyajikan file kendalian pengguna dengan tipe yang hilang atau keliru, MIME sniffing dapat mengubah perlakuan terhadap respons tertentu. Kirim tipe yang benar dan X-Content-Type-Options: nosniff, lalu pisahkan unggahan dari origin aplikasi. Header ini mengurangi satu risiko interpretasi browser; header ini tidak menyanitasi file dan tidak menggantikan kontrol unggahan.
Bagaimana unggahan melewati batas dokumen
Misalkan aplikasi menerima unggahan lalu menyajikannya dari origin terautentikasi miliknya dengan Content-Type yang hilang atau tidak cocok. Jika browser menafsirkan respons sebagai dokumen HTML, markup dalam file dapat aktif di origin situs. Saat korban membuka file, hal ini menimbulkan risiko XSS tersimpan atau kebingungan konten. Ekstensi dan tipe media yang diklaim pada permintaan unggah tidak membuktikan format byte sebenarnya.
Tetapkan tipe dengan sengaja dan pisahkan unduhan
HTTP/1.1 200 OK Content-Type: application/octet-stream // tanpa X-Content-Type-Options // origin yang sama dengan aplikasi terautentikasi
HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 X-Content-Type-Options: nosniff Content-Disposition: attachment; filename="download.txt"
Gunakan Content-Type yang dipilih server dan sesuai dengan byte; jangan menyalin tipe yang diklaim pengunggah. X-Content-Type-Options: nosniff menonaktifkan MIME sniffing untuk respons dokumen dan memblokir permintaan script atau stylesheet dengan tipe MIME yang salah. Ini bukan perbaikan XSS universal: sajikan unggahan dari origin terpisah, utamakan Content-Disposition: attachment untuk unduhan, serta terapkan aturan ukuran, otorisasi, dan validasi file. Untuk gambar atau media inline, kembalikan tipe terverifikasi dan uji jalur respons browser yang sebenarnya.
Pertanyaan umum
Tidak. Header ini mengatur interpretasi MIME browser dan pemeriksaan permintaan script/style, tetapi tidak memvalidasi atau menyanitasi file, tidak memperbaiki Content-Type yang salah, dan tidak mengisolasi unggahan satu origin. Gunakan origin terpisah dan unduhan attachment untuk file tak tepercaya.
Referensi
- MDN — header respons X-Content-Type-Options
- WHATWG Fetch Standard — X-Content-Type-Options
- OWASP — header respons keamanan HTTP