Apa yang Dilakukan X-Content-Type-Options?

Header keamanan adalah subset dari header respons HTTP yang dapat diatur oleh server web yang masing-masing menerapkan kontrol keamanan di browser. Header HTTP adalah bentuk metadata yang dikirim dengan permintaan dan tanggapan web. Header keamanan “X-Content-Type-Options” mencegah browser melakukan sniffing MIME.

Catatan: Header HTTP tidak eksklusif untuk HTTP dan juga digunakan di HTTPS.

Apa itu mengendus MIME?

Saat data apa pun dikirim melalui web, salah satu bagian metadata yang disertakan adalah tipe MIME. Ekstensi Surat Internet Serbaguna, atau tipe MIME adalah standar yang digunakan untuk menentukan tipe data yang berisi file, yang menunjukkan bagaimana file harus ditangani. Biasanya, tipe MIME terdiri dari tipe dan subtipe dengan parameter dan nilai opsional. Misalnya, file teks UTF-8 akan memiliki tipe MIME “text/plain; rangkaian karakter = UTF-8”. Dalam contoh itu, tipenya adalah "teks", subtipenya adalah "polos", parameternya adalah "charset", dan nilainya adalah "UTF-8".

Untuk mencegah kesalahan pelabelan dan penanganan file yang salah, server web biasanya melakukan sniffing MIME. Ini adalah proses di mana tipe MIME yang dinyatakan secara eksplisit diabaikan, dan sebagai gantinya, awal file dianalisis. Sebagian besar tipe file menyertakan urutan header yang menunjukkan tipe file apa itu. Sebagian besar waktu, tipe MIME benar, dan mengendus file tidak ada bedanya. Jika ada perbedaan, server web akan menggunakan tipe file yang diendus untuk menentukan cara menangani file daripada tipe MIME yang dideklarasikan.

Masalah terjadi jika penyerang berhasil mengunggah file seperti gambar PNG, tetapi file tersebut benar-benar sesuatu yang lain seperti kode JavaScript. Untuk tipe file serupa, seperti dua tipe teks, ini mungkin tidak terlalu menimbulkan masalah. Ini menjadi masalah serius, namun, jika file yang benar-benar tidak berbahaya dapat dieksekusi sebagai gantinya.

Apa yang dilakukan X-Content-Type-Options?

Header X-Content-Type-Options hanya memiliki satu kemungkinan nilai "X-Content-Type-Options: nosniff". Mengaktifkannya memberi tahu browser pengguna bahwa itu tidak boleh melakukan sniffing tipe MIME dan sebaliknya bergantung pada nilai yang dinyatakan secara eksplisit. Tanpa pengaturan ini, jika file JavaScript berbahaya disamarkan sebagai gambar seperti PNG, maka file JavaScript akan dieksekusi. Dengan mengaktifkan X-Content-Type-Options, file akan diperlakukan sebagai gambar yang gagal dimuat karena file tersebut bukan format gambar yang valid.

X-Content-Type-Options tidak terlalu diperlukan di situs web yang sepenuhnya menggunakan sumber daya pihak pertama, karena tidak ada kemungkinan file berbahaya disajikan secara tidak sengaja. Jika situs web menggunakan konten pihak ketiga seperti eksternal, atau sumber daya yang dikirimkan pengguna, maka X-Content-Type-Options memberikan perlindungan terhadap jenis serangan ini.