Generator Content Security Policy (CSP)
Susun Content-Security-Policy per direktif, ekspor sebagai header, meta tag, konfigurasi Nginx atau Apache, dan dapatkan peringatan untuk pengaturan yang tidak aman.
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests">
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests" always;
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
Impor kebijakan yang sudah ada
Apa itu Generator CSP?
Generator CSP ini membantu Anda menulis Content-Security-Policy yang membatasi asal pemuatan skrip, gaya, gambar, frame, dan sumber daya lainnya. Alat ini dimulai dari kebijakan yang ketat, memungkinkan Anda mengedit setiap direktif, dan mengevaluasi hasilnya secara langsung, dengan peringatan atas kelemahan seperti 'unsafe-inline', sumber skrip wildcard, object-src atau base-uri yang hilang, dan kata kunci tanpa tanda kutip. Anda juga bisa mengimpor kebijakan yang sudah ada.
Cara menggunakan Generator CSP
- Mulai dari Kebijakan awal yang ketat atau Hapus semua.
- Edit sumber setiap direktif, misalnya
'self' https://cdn.example.com. - Aktifkan upgrade-insecure-requests dan tambahkan report-uri jika perlu.
- Baca evaluasi kebijakan dan perbaiki temuan tingkat tinggi dan sedang.
- Salin kebijakan sebagai header HTTP, meta tag, baris Nginx atau Apache; atau impor kebijakan yang sudah ada untuk dianalisis.
Contoh
Strict starter policy
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
Kapan menggunakan Generator CSP
Gunakan untuk menyusun draf atau meninjau CSP sebelum diterapkan. Luncurkan kebijakan baru dengan Content-Security-Policy-Report-Only terlebih dahulu dan pantau pelanggarannya, karena kebijakan yang ketat akan merusak skrip inline dan widget pihak ketiga yang lupa Anda izinkan. Pemeriksaannya bersifat statis dan tidak bisa melihat skrip apa yang benar-benar dimuat halaman Anda.
Cara kerja Generator CSP
Direktif diserialisasi dalam urutan tetap sebagai name source source; …, dengan melewati yang kosong. Evaluasi menerapkan aturan statis yang mirip dengan CSP Evaluator milik Google: kata kunci seperti self atau none harus diberi tanda kutip; script-src (atau default-src sebagai cadangan) tanpa nonce/hash yang berisi 'unsafe-inline', 'unsafe-eval', *, http:, https:, atau data: ditandai; object-src sebaiknya 'none'; base-uri, frame-ancestors, dan form-action sebaiknya diatur. Versi meta tag menghilangkan frame-ancestors, report-uri, report-to, dan sandbox, yang diabaikan browser di meta tag.
Kasus Penggunaan Umum
- Membuat CSP ketat pertama untuk situs baru.
- Mengaudit kebijakan yang disalin dari produksi untuk 'unsafe-inline' dan wildcard.
- Menambahkan host analitik atau CDN ke script-src dengan benar.
- Mendapatkan baris add_header Nginx yang tepat untuk sebuah kebijakan.
Pertanyaan Umum
Mengapa 'unsafe-inline' menjadi masalah?
Direktif ini mengizinkan skrip inline apa pun, termasuk yang disisipkan melalui celah XSS, sehingga menggagalkan tujuan utama CSP. Gunakan nonce atau hash sebagai gantinya.
Header atau meta tag?
Utamakan header HTTP. Meta tag tidak bisa memakai frame-ancestors, report-uri, atau sandbox, dan hanya berlaku untuk konten setelahnya.
Bagaimana cara menguji tanpa merusak situs saya?
Kirim kebijakan yang sama sebagai Content-Security-Policy-Report-Only; browser melaporkan pelanggaran di konsol tanpa memblokir apa pun.