FlawOpen

flawopen.com/XSS/Content-type sniffing

XSS akibat MIME sniffing: bagaimana kebingungan MIME mencapai browser

Halaman referensi
Jawaban singkat

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

BERISIKO — unggahan disajikan inline dengan header ambigu
HTTP/1.1 200 OK
Content-Type: application/octet-stream
// tanpa X-Content-Type-Options
// origin yang sama dengan aplikasi terautentikasi
LEBIH AMAN — tipe benar, nosniff, dan unduhan terisolasi
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

Apakah nosniff membuat semua unggahan aman untuk disajikan?

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

Lihat juga Cross-Site Scripting (XSS, CWE-79): cara kerja dan cara mencegahnya di setiap bahasa — flawopen.com CSP dan output escaping: apakah keduanya diperlukan? Apakah dangerouslySetInnerHTML di React aman? Apakah DOMPurify cukup untuk mengamankan innerHTML? Apakah rendering Markdown aman dari XSS? Apakah Svelte aman dari XSS secara default? Apakah unggahan SVG berisiko XSS?