FlawOpen

flawopen.com/XSS/CSP vs. escape

CSP dan output escaping: perlukah keduanya untuk XSS?

Halaman referensi
Jawaban singkat

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

Encoding kontekstual mencegah injeksi

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.

CSP yang diterapkan dapat membatasi sebagian perilaku injeksi

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

Bagaimana menerapkan CSP yang lebih ketat?

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

Lihat juga Cross-Site Scripting (XSS, CWE-79): cara kerja dan cara mencegahnya di setiap bahasa — flawopen.com Apakah dangerouslySetInnerHTML di React aman? Apakah DOMPurify cukup untuk mengamankan innerHTML? Apakah rendering Markdown aman dari XSS? Apakah Svelte aman dari XSS secara default? Apakah unggahan SVG berisiko XSS? Risiko XSS pada Vue v-html