Security

Menerapkan Content Security Policy tanpa Merusak Komentar dan Iklan

Langkah menyusun Content Security Policy secara bertahap, menggunakan Report-Only, memeriksa third-party scripts, dan menghindari aturan terlalu permisif.

KKXID Editorial··2 menit baca
Ilustrasi sampul artikel Menerapkan Content Security Policy tanpa Merusak Komentar dan Iklan dengan desain teknologi KKXID
On This Page — Daftar Isi

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.

Bacaan dan sumber lanjutan

Artikel terkait

Diskusi & komentar

Komentar menggunakan GitHub Discussions. Untuk menulis komentar, masuk menggunakan akun GitHub kamu. Jaga diskusi tetap sopan dan sesuai topik.

Komentar melalui GitHub sedang disiapkan. Diskusi akan tersedia setelah repositori GitHub Discussions dihubungkan.