Utilia

Generator Content Security Policy (CSP) Online

Buat header Content-Security-Policy, tag meta, dan versi Report-Only dengan preset, nonce, dan hash SHA-256, lalu audit kebijakan yang sudah ada.

Mulai dari preset

Host Google di sini hanyalah contoh yang diambil dari panduan CSP Google untuk tag Google. Google mengubahnya dari waktu ke waktu: periksa dokumentasi terbaru dan hapus yang tidak Anda gunakan.

Direktif

Sumber dipisahkan dengan spasi. Kosongkan kolom untuk menghilangkan direktif (direktif fetch kemudian beralih ke default-src).

Tambah cepat

Nonce harus berupa nilai acak baru di setiap respons, dibuat oleh server Anda dan diulang di setiap <script nonce="…">. Nonce yang tetap tidak melindungi apa pun.

Hash skrip atau gaya inline

Hash mencakup teks persis di antara tag, termasuk spasi dan baris baru: setiap perubahan memerlukan hash baru. Event handler inline (onclick=…) juga memerlukan 'unsafe-hashes'.

Laporan pelanggaran

Menambahkan report-uri (browser lama) dan report-to dengan header Reporting-Endpoints.

Pada tag <meta>, browser mengabaikan frame-ancestors, report-uri, report-to, dan sandbox, serta Report-Only tidak didukung. Letakkan tag di bagian atas <head>: tag hanya berlaku untuk konten yang muncul setelahnya.

Tinjauan kebijakan ini

Evaluasi kebijakan yang sudah ada

Cara membuat kebijakan CSP

  1. Pilih titik awal di Mulai dari preset: Ketat (nonce + strict-dynamic), Situs statis yang dikunci ketat, Situs web umum, atau Umum + Google Analytics / Ads. Editor terbuka dengan preset situs web umum.
  2. Sesuaikan Direktif. Setiap kolom menerima sumber yang dipisahkan spasi; kolom kosong berarti direktif tersebut dihilangkan.
  3. Gunakan Tambah cepat untuk menambahkan kata kunci ke Direktif yang dipilih: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Tambahkan nonce menyisipkan nonce acak 128-bit.
  4. Untuk mengizinkan satu skrip inline tertentu tanpa 'unsafe-inline', tempel skrip itu (atau HTML di sekitarnya) di Hash skrip atau gaya inline, lalu klik Hitung SHA-256 dan tambahkan.
  5. Centang upgrade-insecure-requests jika masih ada URL lama yang memakai http://, dan jika perlu isi URL endpoint laporan (opsional).
  6. Salin Header HTTP, Header Report-Only (uji tanpa memblokir), atau Tag HTML. Tinjauan kebijakan ini diperbarui saat Anda mengetik.

Untuk mengaudit kebijakan yang sudah Anda miliki, tempel di Evaluasi kebijakan yang sudah ada dan klik Evaluasi kebijakan; Muat ke editor menyalinnya ke kolom-kolom di atas. Semuanya berjalan di browser Anda: kebijakan yang Anda masukkan tidak dikirim ke server.

Fungsi Content Security Policy

CSP memberi tahu browser dari asal (origin) mana saja sebuah halaman boleh memuat skrip, gaya, gambar, font, frame, dan koneksi. Tugas utamanya adalah membatasi cross-site scripting (XSS): meskipun penyerang berhasil menyisipkan markup ke halaman Anda, kebijakan yang baik mencegah skrip sisipan itu berjalan. CSP juga mengatur siapa yang boleh menyematkan halaman Anda (frame-ancestors), ke mana formulir boleh dikirim (form-action), dan ke mana <base> boleh menunjuk (base-uri).

Direktif fetch seperti img-src atau font-src beralih ke default-src bila tidak ditentukan. Sebaliknya, base-uri, form-action, dan frame-ancestors tidak memiliki cadangan seperti itu, itulah sebabnya tinjauan meminta Anda mengisinya secara eksplisit.

Nonce, hash, dan strict-dynamic

Mengizinkan host tertentu (script-src https://cdn.example.com) tampak aman, tetapi sering bisa dilewati: domain besar menyediakan endpoint JSONP dan pustaka lama yang dapat dimanfaatkan penyerang. Pendekatan yang direkomendasikan tim keamanan browser adalah CSP ketat: setiap <script> yang sah membawa nonce yang dibuat server untuk setiap respons, atau diizinkan lewat hash-nya, dan 'strict-dynamic' membiarkan skrip tepercaya itu memuat skrip lain yang dibutuhkannya. Dalam pengaturan ini, https: dan 'unsafe-inline' hanya menjadi cadangan untuk browser yang sangat lama; browser modern mengabaikannya.

Nonce hanya berfungsi jika berubah di setiap respons dan tidak dapat ditebak. Nonce yang disisipkan oleh Tambahkan nonce hanyalah contoh: server atau framework Anda harus membuat nonce sendiri. Hash mencakup byte persis dari kode inline, sehingga memformat ulang skrip berarti memerlukan hash baru.

Header, Report-Only, dan tag meta

Kirim kebijakan sebagai header respons HTTP bila memungkinkan. Terapkan dulu sebagai Content-Security-Policy-Report-Only: browser melaporkan pelanggaran (ke konsol, dan ke endpoint Anda jika diatur) tanpa memblokir apa pun, sehingga Anda dapat memperbaiki halaman sebelum kebijakan diberlakukan. Pengaturan laporan menambahkan report-uri untuk browser lama dan report-to dengan header Reporting-Endpoints.

Versi <meta http-equiv> praktis untuk hosting statis, tetapi browser mengabaikan frame-ancestors, report-uri, report-to, dan sandbox di dalamnya, dan tidak ada tag meta Report-Only. Alat ini menghapus direktif tersebut dari tag dan memberi tahu Anda.

Apa yang diperiksa alat ini

Tinjauan kebijakan ini menandai masalah dengan tingkat keparahan Tinggi, Sedang, Rendah, atau Info: 'unsafe-inline' dan 'unsafe-eval' di script-src, wildcard dan skema seperti https: atau data: pada sumber skrip, object-src, base-uri, frame-ancestors, dan form-action yang hilang, direktif yang salah eja atau sudah usang, serta kata kunci yang lupa diberi tanda kutip tunggal. Pemeriksaan ini membantu menemukan kesalahan umum, tetapi bukan jaminan keamanan: uji kebijakan Anda di browser yang sebenarnya, dan mulailah dengan mode Report-Only.

Pertanyaan yang sering diajukan

Apakah 'unsafe-inline' di style-src menjadi masalah?

Risikonya lebih kecil daripada di script-src dan sangat umum, karena banyak pustaka menetapkan gaya inline. CSS yang disisipkan tetap bisa merusak tampilan halaman atau membocorkan data, sehingga tinjauan mencantumkannya dengan tingkat keparahan rendah.

Apakah daftar host Google Analytics sudah lengkap?

Daftar itu hanya contoh dari panduan CSP Google untuk tag Google. Google menyesuaikannya dari waktu ke waktu dan domain regional mungkin diperlukan; periksa dokumentasi Google terbaru dan hapus yang tidak Anda gunakan. Snippet inline gtag.js juga memerlukan nonce atau hash.

Mengapa kebijakan saya memblokir skrip inline milik saya sendiri?

Begitu script-src diatur tanpa 'unsafe-inline', setiap <script> inline dan atribut onclick= diblokir. Pindahkan kodenya ke file, atau tambahkan nonce atau hash.

Apakah CSP menggantikan escaping input pengguna?

Tidak. CSP adalah lapisan pertahanan kedua. Tetaplah melakukan escaping pada output dan validasi pada input; kebijakan ini membatasi kerusakan ketika ada yang lolos.

Bolehkah memiliki beberapa kebijakan sekaligus?

Boleh: jika sebuah halaman menerima beberapa header CSP, sumber daya harus memenuhi semuanya. Tempel satu kebijakan pada satu waktu ke evaluator.