ProbeHunt

Tambahkan Content-Security-Policy

Header web · sekitar 1 jam

Dengan bahasa sederhana

CSP adalah daftar izin dari mana halaman Anda boleh memuat skrip, style, dan gambar. Jika penyerang berhasil menyisipkan skrip, browser menolak menjalankannya.

Apa risikonya

Tanpa CSP (atau dengan 'unsafe-inline' / 'unsafe-eval' / wildcard), satu celah injeksi bisa berujung pengambilalihan akun, pencurian data kartu, atau deface.

Cara memperbaikinya

Pilih platform yang dipakai situs Anda. Tidak yakin? Teruskan halaman ini ke pengelola website Anda.

Nginx

# inside the server { } block
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" always;

Apache / .htaccess

<IfModule mod_headers.c>
  Header always set Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'"
</IfModule>

Cloudflare

Rules → Transform Rules → Modify Response Header
  Set static: Content-Security-Policy-Report-Only = default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

# Cloudflare Pages: add to public/_headers
/*
  Content-Security-Policy-Report-Only: default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

Vercel

// vercel.json
{ "headers": [ { "source": "/(.*)", "headers": [
  { "key": "Content-Security-Policy-Report-Only", "value": "default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" }
] } ] }

Netlify

# public/_headers
/*
  Content-Security-Policy-Report-Only: default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'

WordPress

// functions.php (child theme) — or use your security plugin's "HTTP headers" setting
add_action('send_headers', function () {
  header('Content-Security-Policy-Report-Only: default-src \'self\'; img-src \'self\' data:; script-src \'self\'; style-src \'self\' \'unsafe-inline\'; frame-ancestors \'none\'; base-uri \'self\'; form-action \'self\'');
});
Sebelum mengubah apa pun: Mulai dengan Content-Security-Policy-Report-Only (seperti di atas) dan pantau console browser beberapa hari. Tambahkan domain yang memang dibutuhkan (analitik, pembayaran, font), lalu ganti nama header menjadi Content-Security-Policy. Untuk skrip, utamakan nonce atau hash daripada 'unsafe-inline'.

Pastikan sudah berhasil

Jalankan ulang cek ProbeHunt. Cek ini menandai CSP yang tidak ada maupun script-src yang terlalu longgar.

Jalankan ulang cek gratis

Referensi