<script src= "cdn/lib.js" integrity= "sha384-oqV..."SHA-384mismatch → refuse to load

Integriti Subsumber

10 min bacaTeknologi Web

Setiap teg skrip yang menunjuk kepada CDN ialah hubungan amanah dengan CDN tersebut. Jika CDN dikompromi atau dipaksa, skrip yang dihantar kepada pelawat anda berubah — dan mereka mendapat apa sahaja yang CDN sediakan sekarang. Integriti Subsumber ialah ciri penyemak imbas yang menyematkan setiap skrip pada cincang kriptografi, jadi sebarang gangguan dikesan dan skrip ditolak.

Badan artikel penuh disediakan dalam bahasa Inggeris di bawah.

Subresource Integrity (SRI) ialah ciri keselamatan yang membolehkan halaman web menentukan cincangan kriptografi untuk setiap sumber luaran yang dimuatkan. Penyemak imbas mengambil sumber, mencincangnya dan membandingkan dengan nilai yang dijangkakan. Jika cincangan tidak sepadan, sumber tersebut ditolak.

W3C menyeragamkan SRI pada 2016. Penerimaan mengambil masa bertahun-tahun dan kini meluas — tapak utama dan CDN menyokongnya secara meluas.

Ancaman SRI alamat

Tanpa SRI, halaman src="https://cdn.example.com/library.js"> mempercayai CDN untuk menyampaikan dengan tepat apa yang dimaksudkan. Masalah:

  • CDN berkompromi. Jika penyerang mengambil alih CDN, setiap tapak yang memuatkan skrip daripadanya mendapat kod penyerang sebaliknya.
  • Memaksa CDN. Perintah penghantaran kerajaan kepada skrip CDN tertentu boleh memaksa pengguna yang diubah suai. regions.
  • Insider attack. Seorang pekerja di CDN, perkhidmatan pengehosan perpustakaan atau sumber pakej huluan mengubah suai fail. Tanpa SRI, setiap pengguna hiliran memuatkan versi yang diubah suai.
  • Account takeover. Akaun pengarang perpustakaan telah terjejas; versi baharu menolak kod hasad yang mengambil tapak secara automatik.

SRI tidak menghalang kompromi ini tetapi menghalangnya daripada mencapai pelawat anda.

Cara SRI berfungsi secara sintaksis

Atribut integriti memegang algoritma (sha384 di sini; sha256 dan sha512 turut disokong) dan cincangan berkod base64. Atribut silang asal diperlukan supaya penyemak imbas boleh menggunakan CORS untuk mengambil dan mengesahkan sumber.

Jika cincangan skrip yang diambil sepadan, ia akan dijalankan. Jika tidak, penyemak imbas mencatat ralat konsol dan tidak melaksanakan skrip. Halaman mungkin pecah, tetapi ia tidak menjalankan kod yang tidak dipercayai.

Apa yang SRI melindungi dan tidak

SRI melindungi daripada pengubahsuaian yang tidak dijangka bagi sumber tertentu. Ia tidak:

  • Menghalang penerbit yang sah daripada menukar sumber (dengan kemas kini cincang yang sepadan).
  • Melindungi sumber tanpa atribut integriti — kebanyakan halaman mempunyai ratusan sumber; SRI pada pustaka utama tidak membantu jika skrip lain yang tidak disahkan turut dimuatkan.
  • Pertahankan terhadap kerentanan dalam sumber itu sendiri.
  • Gunakan pada skrip yang dimuatkan secara dinamik (anda boleh mengesahkan cincangan secara manual, tetapi ia memerlukan kod tersuai).
XVersi tersuai. trade-off

SRI menggandingkan sumber kepada versi tertentu. Jika anda mahukan "versi kecil terkini" dengan kemas kini automatik untuk pembetulan pepijat, SRI tidak sesuai — setiap perubahan dalam sumber memerlukan pengemaskinian cincang. Pilihannya ialah:

  • Pin ke versi tertentu dengan SRI untuk pengesanan gangguan
  • Gunakan sumber auto-kemas kini tanpa SRI dan percayai pembekal

Untuk tapak bernilai tinggi, penyematan versi dengan SRI adalah lalai yang lebih selamat. Untuk tapak yang menampal keselamatan automatik perpustakaan lebih penting daripada pengesanan gangguan (jarang berlaku), pertukaran berlaku sebaliknya.

SRI dan CSP bersama-sama

SRI berpasangan secara semula jadi dengan Dasar Keselamatan Kandungan. CSP boleh menentukan require-sri-for skrip style, yang membuatkan penyemak imbas enggan memuatkan sebarang skrip atau lembaran gaya tanpa atribut integriti. Ini memaksa penggunaan SRI pada peringkat dasar, menghalang peninggalan secara tidak sengaja.

Gabungan — CSP + SRI + sekatan asal yang betul — ialah resipi moden untuk halaman web yang dikeraskan.

Realiti operasi

SRI disokong dengan baik oleh penyemak imbas, Safariv Edgerj, (Chrome, Firefox, dan Firefox) cdnjs, unpkg semuanya menyediakan cincangan SRI untuk perpustakaan yang dihoskan). Halangan arus perdana untuk diterima pakai ialah kerumitan operasi:

  • Setiap versi perpustakaan mempunyai cincangnya sendiri
  • Mengemas kini perpustakaan bermakna menjana cincang baharu dan mengemas kini setiap halaman yang merujuknya
  • Build talian paip perlu menyertakan penjanaan cincangan kendiri untuk penjanaan hos kendiriPLXPL8ZnaXX. binaan di mana himpunan JS berubah setiap penggunaan memerlukan pencincangan SRI automatik dalam langkah binaan

Rangka kerja utama (pak web, Vite, parcel, esbuild) termasuk pemalam SRI untuk mengendalikan pencincangan masa binaan. Untuk apl biasa, ini adalah tugas persediaan sekali sahaja.

SRI pada 2026

Ciri ini kini menjadi garis dasar untuk tapak yang mementingkan keselamatan. Jurang yang tinggal ialah beberapa perpustakaan popular dimuatkan daripada banyak CDN dengan variasi versi; alatan untuk menjejak dan menyebarkan kemas kini cincang telah bertambah baik tetapi masih memerlukan perhatian.

Untuk pengguna, SRI berkuat kuasa secara senyap pada banyak tapak yang anda lawati setiap hari. Penyemak imbas mengendalikan pengesahan secara automatik. Anda hanya perasan apabila sesuatu terputus — biasanya kerana cincangan tidak segerak selepas kemas kini perpustakaan.

Soalan lazim

Mengapakah SRI perlu jika saya sudah menggunakan HTTPS?
HTTPS melindungi skrip dalam transit antara CDN dan penyemak imbas. Ia tidak melindungi daripada kompromi CDN itu sendiri. CDN yang menyediakan skrip berniat jahat kepada anda melalui sambungan TLS yang sah adalah perkara yang dipertahankan oleh SRI.
Adakah saya perlu menentukan SRI pada setiap skrip?
Untuk skrip luaran, ya — di situlah nilainya. Skrip yang dihoskan sendiri pada asal anda sendiri tidak mendapat manfaat daripada SRI (jika asal anda terjejas, halaman itu sendiri juga). Kebanyakan persediaan moden menggunakan SRI pada sumber yang dihoskan CDN.
Bagaimana jika perpustakaan saya kerap dikemas kini?
Kunci kepada versi tertentu dan kemas kini versi + cincang bersama-sama. Pengemaskinian automatik kepada "terkini" adalah bertentangan dengan SRI. Bagi kebanyakan tapak pengeluaran, versi yang disematkan ialah pilihan yang tepat — kemas kini automatik kebergantungan telah menyebabkan insiden pengeluaran sebenar.
Bolehkah penyerang memintas SRI?
Bukan pada tahap protokol — matematiknya kukuh. Pintasan praktikal datang daripada salah konfigurasi: hilang atribut silang asal (menyebabkan gagal-terbuka dalam sesetengah senario), atau penyerang mengawal halaman itu sendiri (dalam hal ini mereka tidak perlu memintas SRI; mereka mengalih keluarnya).
Sekiranya saya menggunakan SHA-256, SHA-384 atau SHA-512?
Pelayar menyokong ketiga-tiganya. SHA-384 ialah pilihan biasa — rintangan perlanggaran lebih kuat sedikit daripada SHA-256 manakala lebih pendek daripada SHA-512. Keselamatan praktikal adalah setanding; pilih satu dan gunakan secara konsisten.
Integriti Subsumber Dijelaskan: Cara Halaman Mengesahkan Skrip yang Dimuatkan