Pembuat CSP — Content Security Policy, dengan tepi tajam yang ditandai
Pembuat CSP
Centang direktif dan sumbernya, dan halaman ini menyusun Content-Security-Policy satu baris yang benar untuk header respons atau tag <meta> Anda — ditambah catatan yang penting: direktif mana yang tidak pernah jatuh kembali ke default-src, kapan hash atau nonce diam-diam mengesampingkan unsafe-inline, dan apa yang dimatikan strict-dynamic. Generator hash SHA-256/384/512 bawaan mengubah skrip dan gaya inline menjadi sumber 'sha256-…'. Semuanya berjalan di browser; tidak ada yang diunggah.
Direktif fetch — dari mana konten boleh berasal
Direktif yang tidak dicentang tidak ada dalam kebijakan; centang tanpa sumber yang dipilih diabaikan. 'none' membatalkan kotak lain di barisnya. Kotak sumber tambahan menerima daftar yang dipisahkan koma: nama host (cdn.example.com), skema (https:), hash, dan nonce dengan atau tanpa tanda kutipnya.
direktif
'self'
'none'
'unsafe-inline'
'unsafe-eval'
'strict-dynamic'
data:
blob:
sumber tambahan
Direktif dokumen — apa yang boleh dilakukan halaman itu sendiri
Keempat ini tidak jatuh kembali ke default-src: membiarkannya kosong berarti "tanpa pembatasan", sehingga kebijakan yang lengkap mengaturnya secara eksplisit.
direktif
'self'
'none'
sumber tambahan
Sakelar, nonce, dan pelaporan
nonce skrip
report-uri
report-to
Kebijakan
Belum ada yang dibangun. Centang beberapa sumber dan tekan Bangun kebijakan, atau muat contoh baseline OWASP.
Generator hash untuk skrip dan gaya inline
Tempel isi persis di antara <script> dan </script> (atau blok style) — byte demi byte, tanpa baris baru di awal atau akhir — lalu pilih algoritma. Hasilnya adalah sumber 'sha256-…' yang diharapkan CSP 3.
Output hash akan muncul di sini.
Terapkan sebagai header, bukan tag meta, kapan pun Anda bisa. Header respons adalah CSP lengkap: frame-ancestors, report-uri, dan report-to hanya berfungsi di sana, dan header diterapkan sebelum byte pertama HTML diurai. Tag meta adalah cadangan untuk file statis tanpa konfigurasi server. Periksa header yang sebenarnya dikirim situs Anda di pemeriksa header keamanan, dan uraikan blok respons mentah di pengurai header HTTP.
Uji mandiri Menjalankan ulang pembangun terhadap keadaan tetap: urutan sumber, saling-eksklusif 'none', string baseline OWASP, pengutipan nonce dan hash, catatan tanpa-fallback untuk base-uri / form-action / frame-ancestors, unsafe-inline yang ditimpa oleh nonce atau hash, catatan strict-dynamic, nama header Report-Only, pengecualian tag meta, generator hash terhadap vektor SHA yang dihitung secara independen, dan jalur negatif. Tidak ada yang dikirim ke mana pun.
Apa itu Content Security Policy?
Dalam satu kalimat: CSP adalah daftar putih yang dikirim server bersama halaman dan memberi tahu browser dengan tepat dari mana skrip, gaya, gambar, dan koneksi boleh berasal — sehingga bahkan jika penyerang menyisipkan HTML, skrip yang disisipkan tetap gagal dimuat, karena sumbernya tidak ada dalam daftar.
ya — direktif yang tidak dicentang mewarisi default-src
Direktif dokumen
base-uri, form-action, frame-ancestors, sandbox
apa yang boleh dilakukan halaman itu sendiri (disematkan, mengirim formulir ke, menyelesaikan URL relatif terhadap)
tidak — masing-masing harus diatur secara eksplisit
Pelaporan dan lain-lain
report-uri, report-to, upgrade-insecure-requests
ke mana laporan pelanggaran dikirim, dan peningkatan URL lama
tidak (bukan direktif fetch)
Tepi-tepi paling tajam, masing-masing satu paragraf
'unsafe-inline' vs hash dan nonce. Jika suatu direktif memuat nonce atau sumber hash apa pun, CSP 3 menyatakan bahwa 'unsafe-inline'diabaikan — ia tetap ada hanya untuk browser kuno. Inilah sebabnya "Anda menambahkan nonce dan tetap menyimpan unsafe-inline demi keamanan" sebenarnya berarti browser modern menegakkan nonce. Generator menandai kombinasi itu agar menjadi keputusan, bukan kecelakaan.
strict-dynamic menonaktifkan daftar izin Anda. Dengan strict-dynamic di script-src, sumber host, skema, 'self', 'unsafe-inline', dan data: semuanya diabaikan untuk skrip; hanya nonce dan hash yang berarti, dan skrip yang mereka muat boleh memuat skrip lebih lanjut. Ini cara modern menjalankan skrip pemuat — tetapi membuat sisa daftar script-src hanya hiasan.
Tag meta kelas dua.frame-ancestors, report-uri, dan report-to diabaikan dalam <meta http-equiv>. Generator menunjukkan bagian mana dari kebijakan Anda yang diam-diam tidak akan berlaku.
Kesalahan umum
Mulai dengan default-src * plus daftar panjang pengecualian. Kerjakan sebaliknya: default-src 'self' yang ketat, lalu perlebar hanya direktif yang memang perlu diperlebar. Kebijakan sempit gagal dengan keras selama pengujian; kebijakan lebar gagal secara diam-diam selamanya.
Mengirim script-src 'unsafe-inline' 'unsafe-eval' dan menganggapnya selesai. Kebijakan itu hampir tidak memblokir apa pun yang diinginkan serangan XSS. Beri nonce atau hash pada skrip Anda, tambahkan strict-dynamic, dan biarkan report-only berjalan di produksi untuk menangkap regresi.
Lupa bahwa default-src tidak mencakup segalanya.base-uri, form-action, frame-ancestors, dan sandbox tidak memiliki cadangan — celah yang paling sering dikutip dalam penerapan CSP di dunia nyata.
Menguji dalam mode enforce terlebih dahulu. Jalankan dalam Report-Only dengan pengumpul selama seminggu, baca laporannya, lalu beralih ke penegakan. Kebijakan yang merusak checkout lebih buruk daripada tanpa kebijakan.
Meng-hash spasi dengan cara berbeda. Hash mencakup byte persis dari blok inline; langkah build yang "membantu" dan memangkas baris baru di akhir mengubah setiap hash. Hasilkan hash dari apa yang dikirim, bukan dari sumber.
FAQ
Apakah Anda perlu default-src jika Anda mencantumkan setiap direktif? Tidak, tetapi menyimpannya sebagai lantai adalah kebiasaan yang baik: direktif fetch baru di browser masa depan kemudian akan jatuh ke dasar Anda alih-alih ke "diizinkan".
Apa sebenarnya yang dilakukan upgrade-insecure-requests? Ia memberi tahu browser untuk menulis ulang setiap URL http:// yang akan dimuat halaman — gambar, gaya, fetch — menjadi https:// sebelum meminta. Ini alat migrasi; keadaan akhirnya adalah halaman tanpa URL http:// sama sekali.
Nonce atau hash? Nonce ketika Anda mengendalikan respons server (nilai acak per respons, di header dan setiap tag skrip). Hash ketika HTML statis atau di-cache. Jangan pernah nonce statis — nonce yang tidak berubah hanyalah unsafe-inline dengan langkah tambahan.
Mengapa kebijakan Anda dikirim tetapi pelanggaran tidak datang? Periksa apakah Anda berada di Report-Only (hanya laporan), apakah report-uri mengarah ke pengumpul yang menerima POST, dan apakah Anda juga mengatur mekanisme Reporting-Endpoints / Report-To yang dibutuhkan direktif modern report-to.
Apakah CSP menggantikan perlindungan lain? Tidak. Ini hanya satu lapisan: tetap escape output Anda, tetap cookie di balik HttpOnly dan Secure, tetap HSTS. Pemeriksa header keamanan di situs ini menilai seluruh rangkaiannya.