flawopen.com/XSS/CSP vs. escape
CSP dan output escaping: perlukah keduanya untuk XSS?
Encoding output sesuai konteks memasukkan nilai tak tepercaya sebagai data, bukan markup yang dapat dieksekusi. Content Security Policy (CSP) adalah lapisan kedua: seperti penjaga yang memeriksa skrip mana yang boleh berjalan dan ke mana koneksi dapat dibuat, CSP dapat memblokir sebagian perilaku injeksi ketika encoding terlewat. CSP tidak memperbaiki celah itu, dan kebijakan yang longgar mungkin tidak menghentikan skrip.
Fungsi masing-masing kontrol
Lakukan encoding saat data masuk ke konteks output. Teks HTML, atribut berpetik, JavaScript, CSS, dan komponen URL memiliki aturan parsing berbeda; encoder harus sesuai konteks persisnya. Utamakan template framework dan DOM sink yang aman, serta hindari nilai tak tepercaya dalam konteks executable seperti skrip inline atau atribut event-handler. Ini adalah kontrol utama pencegahan XSS.
Content-Security-Policy yang diterapkan dapat membatasi skrip inline, sumber skrip, dan tujuan seperti connect-src. Jika encoding terlewat, kebijakan yang dirancang baik dapat memblokir skrip atau koneksi tertentu. Hasilnya bergantung pada kebijakan dan browser; CSP tidak menjamin semua payload, kebocoran data, atau script gadget terhenti, dan injeksi tetap ada.
Mengapa CSP tidak menggantikan encoding output
Kebijakan yang longgar atau salah konfigurasi dapat membiarkan injeksi berjalan. Mengizinkan 'unsafe-inline' melemahkan perlindungan terhadap skrip inline; allowlist host yang luas juga dapat mengizinkan endpoint penyedia skrip. Direktif CSP memiliki fungsi berbeda: pembatasan script-src mungkin perlu disertai connect-src yang dirancang untuk membatasi tujuan jaringan. Content-Security-Policy-Report-Only melaporkan pelanggaran tetapi tidak memblokirnya. Perbaiki dengan encoding output dan gunakan CSP sebagai pertahanan berlapis.
Pertanyaan umum
Inventarisasi skrip yang dibutuhkan dan uji kebijakan berbasis nonce atau hash tanpa 'unsafe-inline' dan 'unsafe-eval'. Gunakan Content-Security-Policy-Report-Only untuk menemukan masalah terlebih dahulu; kebijakan ini tidak menegakkan aturan. Tinjau laporan, sesuaikan dependensi yang sah, lalu aktifkan Content-Security-Policy. Pertahankan encoding kontekstual selama prosesnya.
Referensi
- OWASP — panduan Content Security Policy
- OWASP — pencegahan Cross-Site Scripting
- MDN — penerapan Content Security Policy
- W3C — Content Security Policy Level 3