Script Src Directive Best Practices: Keamanan CSP Web

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 KeamananKasus Penggunaan UtamaRisiko Utama
'none'TertinggiAplikasi statis tanpa skrip pihak ketigaMemblokir seluruh skrip eksternal & inline
'self'TinggiSkrip yang di-host pada origin yang samaRentan jika domain sendiri mengunggah file berbahaya
nonce-Sangat TinggiSkrip inline sah yang dinamis per requestImplementasi server-side yang keliru dapat membocorkan nonce
sha256-Sangat TinggiSkrip inline statis yang jarang berubahPerlu pembaruan hash manual setiap kali skrip berubah
'unsafe-inline'Sangat RendahWarisan aplikasi lama (Legacy)Memicu kerentanan XSS secara langsung
'unsafe-eval'Sangat RendahPenggunaan 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:

  1. Hilangkan Skrip Inline: Pindahkan seluruh kode JavaScript dari atribut HTML (seperti onclick) dan tag <script> internal ke dalam file eksternal yang terpisah.
  2. Gunakan Nonce Kriptografis: Hasilkan string acak unik berbasis kriptografi pada setiap HTTP response di sisi server, lalu pasang pada tag skrip: <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">.
  3. Terapkan Directive Fallback: Selalu definisikan default-src 'self' sebagai jaring pengaman dasar sebelum mendefinisikan aturan spesifik pada script-src.
  4. Batasi Domain Eksternal: Jika memuat pustaka pihak ketiga (seperti Google Analytics), tentukan domain persisnya, contoh: https://www.google-analytics.com, hindari domain umum seperti https: 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.