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.