Website dapat menampilkan konten dinamis, memuat skrip pihak ketiga, dan berkomunikasi dengan berbagai layanan. Fleksibilitas ini berguna, tetapi juga membuka peluang bagi penyerang untuk menyisipkan skrip berbahaya. Salah satu lapisan pertahanan yang dapat membantu mengurangi risiko tersebut adalah Content Security Policy (CSP).
Apa Itu Content Security Policy?
Content Security Policy adalah kebijakan keamanan yang dikirim server kepada browser melalui header HTTP Content-Security-Policy. Kebijakan ini menentukan sumber mana yang diizinkan untuk memuat skrip, stylesheet, gambar, font, frame, dan jenis sumber daya lainnya. Dengan aturan yang tepat, browser dapat menolak sumber yang tidak diizinkan.
CSP bukan pengganti validasi input atau pengodean output yang aman. Fungsinya adalah menambah lapisan pertahanan, terutama untuk membantu membatasi dampak serangan cross-site scripting (XSS).
Bagaimana CSP Bekerja?
Ketika browser menerima halaman, browser juga membaca kebijakan CSP dari server. Setiap kali halaman mencoba memuat sumber daya atau menjalankan skrip, browser membandingkan tindakan itu dengan aturan yang ditetapkan. Jika tindakan tidak sesuai kebijakan, browser dapat memblokirnya dan mencatat pelanggaran di konsol pengembang.
Misalnya, direktif default-src 'self' menjadikan sumber dari origin website sendiri sebagai aturan bawaan untuk sejumlah jenis sumber daya. Direktif yang lebih spesifik, seperti img-src atau script-src, dapat mengatur jenis sumber tertentu secara terpisah.
Contoh Header CSP
Content-Security-Policy: default-src 'self'; img-src 'self' https:; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
Contoh tersebut membatasi sumber bawaan ke origin sendiri, mengizinkan gambar dari origin sendiri dan koneksi HTTPS, melarang objek seperti plugin lama, membatasi elemen dasar URL, serta hanya mengizinkan halaman ditampilkan dalam frame oleh origin sendiri. Ini hanyalah titik awal; kebijakan yang sesuai harus mengikuti kebutuhan nyata website.
Direktif CSP yang Penting
default-src: aturan bawaan untuk jenis sumber daya yang tidak memiliki direktif lebih spesifik.script-src: menentukan sumber skrip yang boleh dijalankan.style-src: mengatur sumber stylesheet.img-src: membatasi sumber gambar.connect-src: mengatur tujuan koneksi dari API seperti Fetch, XHR, dan WebSocket.object-src 'none': menonaktifkan pemuatan objek seperti Flash.frame-ancestors: membatasi situs yang boleh menyematkan halaman melalui frame.upgrade-insecure-requests: meminta browser meningkatkan URL HTTP menjadi HTTPS ketika memungkinkan.
Cara Menerapkan CSP dengan Aman
- Inventarisasi sumber daya. Catat skrip, font, gambar, API, dan layanan pihak ketiga yang benar-benar digunakan website.
- Mulai dengan mode laporan. Gunakan
Content-Security-Policy-Report-Onlyuntuk memantau pelanggaran tanpa langsung memblokir sumber daya. Periksa laporan dan konsol browser. - Susun aturan secara bertahap. Hindari menambahkan
'unsafe-inline'atau'unsafe-eval'tanpa alasan yang kuat. Untuk skrip inline, pertimbangkan nonce acak per respons atau hash yang sesuai. - Uji halaman penting. Periksa formulir, login, editor, analitik, pemutar media, dan fitur lain agar kebijakan tidak memutus fungsi yang diperlukan.
- Aktifkan kebijakan penegakan. Setelah laporan menunjukkan aturan sudah sesuai, gunakan header
Content-Security-Policybiasa dan terus pantau pelanggaran.
Kesalahan yang Perlu Dihindari
Kesalahan umum adalah langsung memakai kebijakan sangat ketat tanpa menguji website, atau justru menggunakan wildcard dan sumber yang terlalu luas sehingga perlindungannya lemah. Jangan menyalin kebijakan dari website lain begitu saja: sumber daya dan arsitektur setiap situs berbeda.
Perlu diingat pula bahwa CSP tidak otomatis memperbaiki celah XSS. Aplikasi tetap harus memvalidasi data, mengodekan output sesuai konteks, menghindari pola DOM yang berbahaya, dan memperbarui dependensi.
Cara Memeriksa CSP
Buka Developer Tools di browser, pilih tab Network, lalu muat ulang halaman dan periksa header respons dokumen utama. CSP juga dapat diperiksa melalui konsol untuk melihat apakah browser melaporkan pelanggaran kebijakan. Jika memakai WordPress, pastikan perubahan header dilakukan melalui konfigurasi hosting, server, atau solusi keamanan yang sesuai dan uji terlebih dahulu di lingkungan yang aman.
Kesimpulan
Content Security Policy membantu website membatasi sumber daya yang dapat dimuat dan skrip yang dapat dijalankan browser. Penerapan bertahap, pemantauan laporan, serta aturan yang spesifik membuat CSP lebih efektif tanpa merusak fungsi situs. Gunakan CSP sebagai bagian dari strategi keamanan berlapis, bukan sebagai satu-satunya perlindungan terhadap XSS. CSP juga melengkapi perlindungan koneksi; lihat panduan HTTPS dan TLS untuk memahami keamanan transportasi.