當你的網站從 CDN 載入第三方腳本,你真的能確定那份程式碼沒被竄改嗎?Subresource Integrity (SRI) 正是為此而生——用一個雜湊值,守住你的前端安全防線。
SRI 如何運作?
SRI 的核心機制極為直接:開發者在 <script> 或 <link> 標籤內嵌入一個 integrity 屬性,其值為資源內容的預期雜湊(支援 SHA-256、SHA-384、SHA-512)。瀏覽器下載資源後,會在本地重新計算雜湊值並與屬性比對。一旦不符,瀏覽器立即拒絕執行或套用該資源,不論差異多小。這意味著即使 CDN 服務商遭到入侵、惡意程式碼被注入,攻擊也會在用戶端被直接攔截,而非悄悄執行。
實際部署與注意事項
產生雜湊最簡單的方式是使用 srihash.org 線上工具,或透過 OpenSSL 指令在本地產生。部署時有兩個關鍵細節:其一,必須搭配 crossorigin="anonymous" 屬性,否則 CORS 問題會導致驗證失敗;其二,雜湊是針對特定版本的檔案內容計算的,每次資源更新都必須同步更新 integrity 值。SRI 對自有伺服器的資源同樣有效,但價值主要體現在第三方來源。值得注意的是,SRI 無法防禦資源在產生雜湊前就已遭到污染的情況。
<script
src="https://cdn.example.com/library.min.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous">
</script>
💡 重點整理
- 雜湊演算法優先選用 SHA-384 或 SHA-512,安全強度優於 SHA-256。
- crossorigin="anonymous" 是必要屬性,缺少將導致 SRI 驗證流程中斷。
- 資源版本升級時須同步更新 integrity 值,否則頁面資源將被全面封鎖。
- 可搭配 Content-Security-Policy 的 require-sri-for 指令,強制整站所有腳本均須通過 SRI 驗證。
SRI 是防禦供應鏈攻擊成本最低的手段之一。一個屬性、一個雜湊值,即可為第三方資源建立起不可繞過的完整性驗證屏障。
留言
張貼留言