Menerapkan Content Security Policy tanpa Merusak Komentar dan Iklan
Content Security Policy atau CSP sering disalin begitu saja dari sebuah tutorial. Beberapa menit kemudian, muncul error: komentar hilang, font tidak tampil, atau widget iklan gagal dimuat. Reaksi berikutnya biasanya menambahkan izin seluas mungkin sampai semua kembali bekerja.
Masalahnya, kalau semua sumber diizinkan, apa yang sebenarnya masih dilindungi CSP?
Kenali sumber daya yang digunakan
Sebelum menulis kebijakan, buat daftar apa saja yang dimuat halaman. Untuk blog Astro, misalnya ada CSS lokal, JavaScript lokal, gambar thumbnail, script komentar Giscus, dan kemungkinan script AdSense.
Browser membedakan jenis sumber daya, seperti script-src untuk script, style-src untuk stylesheet, img-src untuk gambar, connect-src untuk koneksi jaringan, dan frame-src untuk iframe.
Mulai dari mode Report-Only
Alih-alih langsung memblokir semuanya, gunakan header Content-Security-Policy-Report-Only untuk mengamati pelanggaran kebijakan tanpa langsung mematahkan fitur.
Periksa console browser dan laporan yang tersedia. Kunjungi homepage, halaman artikel, pencarian, lalu coba widget komentar. Catat sumber mana yang dibutuhkan dan apakah permintaannya memang sah.
Kebijakan yang bekerja hanya di homepage belum tentu cocok untuk halaman artikel dengan embed pihak ketiga.
Hindari solusi cepat yang terlalu longgar
Menambahkan unsafe-inline di script-src sering menjadi jalan pintas. Tetapi kebijakan akan kehilangan sebagian perlindungan yang justru ingin kita dapatkan. Ada pendekatan nonce atau hash untuk kebutuhan tertentu, dan script eksternal dapat diatur agar lebih mudah dikendalikan.
Untuk situs statis yang memakai beberapa integrasi, kebijakan perlu disesuaikan dengan cara bundler menghasilkan asset. Jangan menganggap satu baris konfigurasi dari blog lain pasti aman di proyekmu.
Giscus dan AdSense berbeda kebutuhan
Giscus mengandalkan script serta iframe yang berhubungan dengan layanan komentarnya. AdSense dapat menggunakan beragam domain dan mekanisme untuk memuat iklan. Jika monetisasi belum aktif, tidak perlu langsung menambahkan seluruh izin AdSense ke CSP.
Saat mengaktifkan AdSense, periksa dokumentasi resmi layanan, kebutuhan privasi, consent, dan kebijakan script. Lakukan pengujian di lingkungan yang sesuai sebelum menegakkan CSP baru.
Rollout bertahap lebih mudah dirawat
Buat kebijakan dasar, uji, lalu perketat. Setiap kali menambahkan layanan pihak ketiga, ulangi pemeriksaan. Idealnya perubahan kebijakan disimpan di Git sehingga alasan penambahan suatu sumber tetap dapat ditelusuri.
Keamanan yang baik bukan tentang memiliki header terpanjang. Justru yang paling berguna adalah kebijakan ringkas, dipahami, dan tidak perlu dinonaktifkan setiap kali website mendapat fitur baru.



