Defaults.Exposed › Pembaikan › Perlindungan penghirupan MIME (X-Content-Type-Options)
Cara memperbaiki Perlindungan penghirupan MIME (X-Content-Type-Options)
Satu pengepala baris yang menghentikan pelayar daripada meneka jenis fail sebenar. Tanpanya, fail yang seseorang muat naik ke laman anda — atau fail pada halaman anda sendiri — boleh salah dibaca oleh pelayar dan dijalankan sebagai kod, yang adalah tepat bagaimana sesetengah serangan mengubah muat naik yang kelihatan tidak berbahaya menjadi cara untuk mencuri sesi pelanggan anda.
Kesimpulan untuk perniagaan anda: Pengepala yang hilang ini adalah tanda yang jelas dan boleh diimbas bahawa asas-asas tidak dikunci. Dengan sendirinya ia jarang menjatuhkan laman, tetapi digabungkan dengan borang muat naik fail atau kandungan yang dijana pengguna ia membuka laluan untuk penyerang menjalankan kod berniat jahat dalam pelayar pengunjung — merampas sesi yang log masuk, mencuri butiran kemasukan kad atau log masuk, dan meletakkan anda pada pihak yang salah dalam perbualan pelanggaran data. Ia adalah salah satu pembetulan termurah dalam keselamatan: satu baris, percuma, kira-kira lima minit.
Apakah kos yang boleh timbul
- Mana-mana halaman di mana pelanggan atau kakitangan boleh memuat naik fail (avatar, dokumen, lampiran sokongan, foto penyenaraian) menjadi kemungkinan tapak pelancaran untuk serangan di pihak pelayar.
- Penyerang boleh menyamarkan kod berniat jahat sebagai imej atau fail teks dan mempunyai pelayar pengunjung menjalankannya — mencuri sesi log masuk mereka di laman anda.
- Soal selidik keselamatan, semakan insurans siber dan pembeli perusahaan mengimbas pengepala ini; ketiadaannya dibaca sebagai 'mereka tidak melakukan asas-asas' dan boleh menangguhkan atau menenggelamkan sesuatu urusan perniagaan.
- Pelayar yang lebih lama dan sesetengah integrasi 'menghidu' jenis kandungan dan boleh mengendalikan fail dengan cara yang merosakkan kepercayaan atau membocorkan data.
Mengapa ia penting. Pelayar, apabila pelayan tidak jelas tentang jenis fail, akan cuba meneka ('menghidu') jenis kandungan. Penyerang mengeksploitasi tekaan itu: muat naik fail yang pelayan label sebagai imej, tetapi reka kandungannya supaya pelayar memutuskan ia sebenarnya JavaScript — dan menjalankannya. Pengepala X-Content-Type-Options: nosniff memberitahu setiap pelayar untuk berhenti meneka dan mempercayai jenis yang dinyatakan pelayan, menutup seluruh kelas helah itu. Ia adalah semakan yang dinilai bernilai 25 mata dan dinilai keparahan sederhana apabila hilang.
Versi ringkas untuk pemilik
Terdapat andaian senyap yang dibina ke dalam setiap pelayar web: apabila ia memuat turun fail dari laman anda, ia cuba mengetahui jenis fail apa ia. Biasanya ia mempercayai pelayan anda. Tetapi jika pelayan anda samar-samar, pelayar akan meneka — dan tekaan itulah yang dipanggil penghirupan MIME.
Masalahnya ialah penyerang boleh permainkan tekaan itu. Mereka boleh mereka fail yang pelayan anda dengan jujur percaya adalah imej yang tidak berbahaya, tetapi pelayar, dibiarkan untuk meneka, memutuskan ia sebenarnya sekeping kod program — dan kemudian menjalankannya, terus dalam pelayar pelanggan anda, pada domain anda.
Terdapat arahan satu baris yang mematikan tekaan: X-Content-Type-Options: nosniff. Ia memberitahu setiap pelayar, “jangan teka — percaya tepat apa yang pelayan saya memberitahu anda.” Itulah keseluruhan pembetulan. Ia percuma, mengambil masa kira-kira lima minit, dan pada laman yang dibina dengan betul ia tidak memutuskan apa-apa.
Semakan ini mencari pengepala itu. Jika ia hilang, anda kehilangan 25 mata dan ia dinilai sebagai isu keparahan sederhana — bukan kerana pengepala sahaja adalah malapetaka, tetapi kerana ketiadaannya adalah tanda yang boleh dipercayai bahawa asas-asas tidak dikunci.
Apa yang ini boleh koskan anda
Ini adalah senario realistik peringkat perniagaan — bukan teater kes terburuk.
-
Lampiran “tidak berbahaya” yang bukan. Anda menjalankan portal sokongan atau pasaran di mana pelanggan memuat naik fail — resit, gambar, dokumen. Penyerang memuat naik fail yang sistem anda simpan dan sajikan sebagai imej. Tanpa nosniff, pelayar mangsa meneka fail sebenarnya skrip dan menjalankannya — secara senyap mencuri sesi log masuk pengunjung itu di laman anda. Kini penyerang adalah mereka: membuat pesanan, membaca mesej, menukar butiran. Anda mendapatinya apabila pelanggan mula mengadu tentang aktiviti yang mereka tidak lakukan.
-
Urusan perniagaan yang tertangguh pada soal selidik keselamatan. Pasukan perolehan pelanggan yang lebih besar menjalankan imbasan automatik laman anda sebelum menandatangani. Pengepala keselamatan yang hilang muncul serta-merta. Walaupun tiada yang pernah dieksploitasi, laporan berkata “pengepala keselamatan web asas tidak hadir,” dan tiba-tiba anda menjawab soalan pemulihan dan menolak tarikh penutupan berminggu-minggu — atas pembetulan yang akan mengambil masa lima minit.
-
Pembaharuan insurans siber yang menjadi lebih sukar. Lebih ramai penanggung insurans kini menjalankan imbasan luaran sebelum memetik atau memperbaharui. Profil pengepala yang bersih adalah bukti kebersihan yang murah; yang hilang adalah tanda hitam kecil yang, ditumpuk dengan yang lain, menaikkan premium anda atau menurunkan terma anda.
-
Pukulan reputasi yang anda tidak dapat dengan mudah dibuat balik. Jika insiden rampasan sesi dikesan kembali kepada fail yang disajikan dari domain anda, ceritanya bukan “pengepala yang tidak jelas hilang” — ia adalah “[perniagaan anda] membocorkan akaun pelanggan.” Itulah versi yang pelanggan ingat, dan ia merugikan jauh lebih banyak daripada pembetulan yang sepatutnya.
Tiada satu pun daripada ini memerlukan penyerang yang canggih. Penyalahgunaan penghirupan MIME adalah difahami dengan baik dan diotomatikkan, itulah sebabnya pengimbas menanda pengepala yang hilang dengan begitu tegas.
Apa yang ia sebenarnya
Apabila pelayar menerima fail, pelayan sepatutnya melabelnya dengan jenis kandungan (contohnya, image/png untuk imej PNG atau text/html untuk halaman web). Secara sejarah, pelayar tidak sepenuhnya mempercayai label itu — sebahagiannya kerana sesetengah pelayan menatapnya dengan salah — jadi mereka akan mengintip bait sebenar fail dan memutuskan sendiri. Pengintipan itu adalah penghirupan MIME.
Ia adalah kemudahan yang menjadi liabiliti. Jika penyerang boleh mendapatkan fail di laman anda (melalui borang muat naik, medan komen, dokumen yang diimport) dan mempengaruhi kandungannya, mereka boleh mereka sesuatu yang pelayan label secara tidak berbahaya tetapi pelayar menghidu sebagai skrip yang boleh dilaksanakan. Pelayar kemudian menjalankannya pada domain anda, dengan semua kepercayaan yang domain anda pegang.
X-Content-Type-Options: nosniff mengalih tekaan itu sepenuhnya. Dengannya ditetapkan, pelayar diberitahu: gunakan jenis yang dinyatakan pelayan dan bukan yang lain. Fail yang dilabel sebagai imej dilayan sebagai imej, sepenuhnya — walaupun kandungannya kelihatan seperti skrip. Vektor serangan tertutup.
Apa yang “baik” kelihatan: setiap respons dari laman anda — halaman dan aset sama — membawa tepat pengepala ini:
X-Content-Type-Options: nosniff
Tiada nilai lain yang sah dan tiada yang perlu diselaras. Jika CDN dan pelayan anda kedua-duanya menambahnya (supaya anda melihat nosniff, nosniff), itu baik-baik sahaja dan masih dikira sebagai lulus.
Cara membetulkannya (percuma, ~5 minit)
Berikan bahagian ini kepada sesiapa yang menjalankan laman web anda — orang IT, pembangun web, atau sokongan pengehosan anda. Pembetulan adalah percuma dan pantas; tiada yang perlu dibeli. Apa yang anda minta adalah mudah: “Tambah pengepala respons X-Content-Type-Options: nosniff kepada setiap halaman dan aset di laman.”
Inilah butirannya untuk mereka, mengikut platform biasa.
Cloudflare (atau CDN/proksi yang serupa) — selalunya tempat yang paling cepat untuk melakukannya, merangkumi keseluruhan laman sekaligus:
- Gunakan Peraturan Transformasi Pengepala Respons (Rules → Transform Rules → Modify Response Header) untuk menetapkan
X-Content-Type-Optionskepadanosniffuntuk semua permintaan masuk. Ini menggunakannya merentasi seluruh laman tanpa menyentuh pelayan asal.
Nginx — tambah dalam blok server (atau location) yang berkaitan:
add_header X-Content-Type-Options "nosniff" always;
Kata kunci always memastikan ia dihantar pada respons ralat juga. Muat semula Nginx selepas menyimpan.
Apache — memerlukan mod_headers diaktifkan; dalam konfigurasi laman atau .htaccess:
Header always set X-Content-Type-Options "nosniff"
IIS / pengehosan Windows — dalam web.config di bawah <system.webServer>:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Node / Express — tetapkan untuk setiap respons:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(Atau gunakan pakej helmet, yang menetapkan ini dan beberapa pengepala keselamatan lain secara lalai.)
Laman Google Workspace / Microsoft 365: ini menguruskan e-mel dan dokumen anda, bukan pengehosan laman web awam anda, jadi pengepala tidak ditetapkan di sana — ia ditetapkan di mana sahaja laman web anda sendiri disajikan (CDN, pelayan web, atau pembina laman). Jika anda menggunakan pembina laman yang dihoskan (Squarespace, Wix, Shopify dan yang serupa), ramai yang menambah pengepala ini untuk anda secara automatik; semak keputusan dan bukannya menganggap, dan tanya sokongan mereka jika ia hilang.
Selepas menggunakan, sahkan. Jalankan semula imbasan anda, atau minta pembangun anda menyemak pengepala respons dalam alat pembangun pelayar (tab Rangkaian → klik mana-mana permintaan → Pengepala Respons) dan sahkan X-Content-Type-Options: nosniff hadir. Uji laman sebentar untuk mengesahkan tiada yang bergaya atau berskrip rosak — pada laman yang dibina dengan betul, tiada yang akan.
Kesilapan biasa
- Menetapkannya pada halaman utama sahaja. Pengepala mesti ada pada setiap respons — termasuk imej, skrip, helaian gaya dan fail yang dimuat naik — kerana itulah sumber yang penghirupan mempengaruhi. Gunakan pada peringkat pelayan atau CDN supaya ia universal, bukan halaman demi halaman.
- Salah taip dalam nilai. Satu-satunya nilai yang sah ialah
nosniff. Apa-apa yang lain (nilai kosong, ejaan yang salah) gagal semakan dan tidak memberikan perlindungan. Pengimbas akan melaporkan nilai yang sebenarnya dilihat supaya anda boleh mengesan salah taip. - Menganggap ia menggantikan Content Security Policy. nosniff adalah satu lapisan. Ia tidak mengawal skrip mana yang dibenarkan untuk dijalankan — itu adalah kerja CSP. Tambah nosniff sekarang sebagai kemenangan pantas, dan anggap CSP yang betul sebagai tindak lanjut yang lebih besar.
- Mengalih “pendua.” Jika CDN dan asal anda menetapkannya, anda akan melihatnya dua kali. Ia tidak berbahaya — jangan habiskan masa mengalihkan satu.
- Membayar untuknya. Ia adalah perubahan konfigurasi percuma. Pemantauan, audit dan papan pemuka portfolio adalah yang berbayar secara sah; menambah satu pengepala tidak.
Berikan ini kepada orang IT anda
Ringkasan teknikal: semakan ini memeriksa pengepala respons HTTP dan lulus apabila X-Content-Type-Options hadir dan nilainya (tidak peka kes) mengandungi nosniff — termasuk kes pelbagai-sumber nosniff, nosniff di mana CDN dan asal kedua-duanya menetapkannya. Hilang atau mana-mana nilai bukan-nosniff gagal. Ia adalah semakan P2 yang dinilai bernilai 25 mata, dinilai keparahan sederhana apabila gagal, dan memetakan kepada OWASP Top 10 A05 (Konfigurasi Keselamatan yang Salah). Pemulihan adalah pengepala respons statik tunggal yang digunakan merentas semua respons; tiada parameter dan tiada nilai alternatif yang sah. Tetapkan pada tepi (CDN) untuk liputan seluruh laman, atau pada pelayan web dengan semantik always supaya ia dikeluarkan pada respons ralat juga, kemudian sahkan dalam pengepala respons.
Soalan Lazim
Kami tidak membenarkan sesiapa memuat naik fail. Adakah kami masih memerlukannya?
Ya, dan ia masih berbaloi dilakukan. Pengepala adalah pertahanan mendalam: ia juga menghentikan pelayar daripada salah membaca skrip, helaian gaya dan fail data yang disajikan dari laman anda sendiri, yang melindungi terhadap beberapa helah skrip merentas laman walaupun pada laman tanpa borang muat naik. Ia tidak memerlukan kos apa-apa dan tidak pernah memutuskan laman yang dikonfigurasi dengan betul, jadi tiada sebab untuk melangkauinya.
Adakah menambah ini akan memutuskan apa-apa pada laman web kami?
Hampir tidak pernah. nosniff hanya membuat pelayar menghormati jenis kandungan yang pelayan anda sudah hantar. Satu-satunya cara ia menyebabkan masalah adalah jika pelayan anda salah melabel fail — contohnya menghantar helaian gaya atau skrip dengan jenis yang salah. Jika ada yang rosak, itu adalah pepijat sebenar yang nosniff terdedah dan bukannya disebabkan, dan ia berbaloi diperbetulkan walau apa pun. Uji sekali selepas digunakan.
Apa yang 'baik' sebenarnya kelihatan?
Satu pengepala respons tunggal pada setiap halaman dan aset: X-Content-Type-Options: nosniff. Itulah keseluruhan konfigurasi yang betul — tiada nilai lain yang sah dan tiada penalaan yang perlu dilakukan.
CDN kami (Cloudflare atau yang serupa) dan pelayan kami kedua-duanya menambahnya — adakah itu masalah?
Tidak. Melihat nilai dua kali ('nosniff, nosniff') kerana kedua-dua CDN dan asal menetapkannya adalah benar-benar baik dan masih lulus. Anda tidak perlu membuang satu daripadanya.
Adakah membetulkan ini memerlukan wang?
Tidak. Pembetulan itu adalah satu baris konfigurasi percuma pada pelayan web atau CDN anda. Sesiapa yang mengenakan bayaran kepada anda untuk menambah satu pengepala adalah mengenakan bayaran yang terlalu tinggi. Satu-satunya perkara yang berbaloi dibayar dalam kawasan ini adalah pemantauan yang berterusan, pandangan portfolio merentas banyak laman, atau audit formal — bukan pembetulan itu sendiri.
Bagaimana ini berbeza dari Content Security Policy (CSP)?
Mereka adalah saling melengkapi. CSP mengawal skrip dan sumber mana yang dibenarkan untuk dimuatkan langsung; nosniff menghentikan pelayar daripada salah mengklasifikasikan fail yang ia muatkan. Anda mahu kedua-duanya. nosniff adalah jauh lebih mudah dan lebih cepat untuk ditambah, jadi ia adalah langkah pertama yang baik dalam perjalanan ke CSP penuh.