Penggunaan script-src directive dalam Content Security Policy (CSP) adalah pertahanan garis depan untuk mengontrol sumber skrip yang diizinkan untuk dimuat dan dieksekusi oleh browser. Konfigurasi yang lemah, seperti penggunaan 'unsafe-inline' atau 'unsafe-eval', membuka celah kerentanan XSS (Cross-Site Scripting) yang memungkinkan penyerang mengeksekusi kode arbitrase di dalam konteks sesi korban.
Implementasi terbaik menuntut penghapusan skrip inline, penerapan pendekatan berbasis nonce (number used once) atau hash kriptografis, serta pembatasan domain eksternal secara ketat menggunakan whitelist yang spesifik, bukan domain liar (wildcard).
Matriks Perbandingan Sumber Skrip CSP
| Nilai Sumber (Source) | Tingkat Keamanan | Kasus Penggunaan Utama | Risiko Utama |
|---|---|---|---|
'none' | Tertinggi | Aplikasi statis tanpa skrip pihak ketiga | Memblokir seluruh skrip eksternal & inline |
'self' | Tinggi | Skrip yang di-host pada origin yang sama | Rentan jika domain sendiri mengunggah file berbahaya |
nonce- | Sangat Tinggi | Skrip inline sah yang dinamis per request | Implementasi server-side yang keliru dapat membocorkan nonce |
sha256- | Sangat Tinggi | Skrip inline statis yang jarang berubah | Perlu pembaruan hash manual setiap kali skrip berubah |
'unsafe-inline' | Sangat Rendah | Warisan aplikasi lama (Legacy) | Memicu kerentanan XSS secara langsung |
'unsafe-eval' | Sangat Rendah | Penggunaan eval() atau setTimeout(string) | Memungkinkan eksekusi string sebagai kode JavaScript |
Langkah Teknis Implementasi Strict CSP
Untuk membangun kebijakan keamanan yang tangguh terhadap eksploitasi injeksi, terapkan urutan konfigurasi teknis berikut:
- Hilangkan Skrip Inline: Pindahkan seluruh kode JavaScript dari atribut HTML (seperti
onclick) dan tag<script>internal ke dalam file eksternal yang terpisah. - Gunakan Nonce Kriptografis: Hasilkan string acak unik berbasis kriptografi pada setiap HTTP response di sisi server, lalu pasang pada tag skrip:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">. - Terapkan Directive Fallback: Selalu definisikan
default-src 'self'sebagai jaring pengaman dasar sebelum mendefinisikan aturan spesifik padascript-src. - Batasi Domain Eksternal: Jika memuat pustaka pihak ketiga (seperti Google Analytics), tentukan domain persisnya, contoh:
https://www.google-analytics.com, hindari domain umum sepertihttps:atau*.
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com 'nonce-R4nd0mB4s364Str1ng'; object-src 'none';Troubleshooting dan Validasi Kebijakan
Pengujian kebijakan CSP harus dilakukan secara bertahap untuk menghindari pemblokiran fungsionalitas situs produksi. Manfaatkan mode laporan saja (Content-Security-Policy-Report-Only) untuk memantau pelanggaran tanpa menghentikan eksekusi skrip pengguna.
Periksa konsol browser (Developer Tools) saat mendeteksi error seperti Refused to execute inline script. Jika pesan tersebut muncul, pastikan skrip tersebut telah diberi nilai nonce yang valid atau dipindahkan ke file eksternal yang diizinkan oleh direktif script-src.