Digital Transformation
Subresource Integrity (SRI)
TL;DR: Subresource Integrity (SRI) adalah fitur keamanan browser yang memverifikasi integritas file eksternal (script atau CSS) lewat hash kriptografi. Browser akan menolak eksekusi file jika hash tidak cocok. Penting untuk website yang load library dari CDN pihak ketiga.
Apa itu SRI?
SRI bekerja dengan menambahkan atribut integrity di tag <script> atau <link>. Atribut ini berisi hash (SHA-256, SHA-384, atau SHA-512) dari file yang diharapkan. Saat browser mengunduh file, browser menghitung hash dan membandingkan. Jika berbeda, file ditolak dan tidak dijalankan.
Contoh: <script src="https://cdn.example.com/jquery.js" integrity="sha384-xxx" crossorigin="anonymous"></script>. Jika ada penyerang yang mengganti file di CDN, hash akan beda dan browser memblokir eksekusi.
Kapan SRI Wajib?
| Skenario | Pakai SRI? |
|---|---|
| Library dari CDN publik (jsDelivr, cdnjs) | Wajib |
| Asset dari CDN sendiri (Vercel, Cloudflare) | Opsional |
| File dari domain sendiri | Tidak perlu |
| Script versioned dengan hash di URL | Tetap dianjurkan |
SRI biasanya dipasangkan dengan CSP untuk pertahanan berlapis. CSP membatasi dari mana script boleh di-load, SRI memastikan isinya tidak diubah.
Kenapa Penting?
MDN Web Docs menjelaskan SRI mitigasi serangan supply chain di mana CDN pihak ketiga dikompromikan. Pada audit website Ryandi Pratama yang load 3 library dari cdnjs, saya menambahkan SRI tag dan menutup celah injection tanpa mengubah fungsi widget. Marketer yang pakai CMS dengan widget eksternal (chat, analytics) wajib mengaudit script tags dan menambahkan integrity hash.
Pertanyaan Umum
Bagaimana cara generate hash SRI?
Pakai perintah openssl dgst -sha384 -binary file.js | openssl base64 -A atau tool online seperti srihash.org. Banyak CDN modern (jsDelivr, cdnjs) sudah menyediakan hash siap pakai.
Apa yang terjadi kalau file CDN di-update tanpa update hash?
Browser akan menolak file dan fitur yang bergantung padanya tidak jalan. Karena itu pakai SRI hanya untuk versioned URL, bukan URL @latest.
Istilah Terkait