Konfigurasi Content Security Policy (CSP) pada Helmet.js
Helmet.js adalah middleware keamanan untuk Express.js yang secara otomatis mengatur header HTTP. Opsi contentSecurityPolicy memungkinkan pengembang mendefinisikan kebijakan sumber daya yang diizinkan dimuat oleh browser, guna memitigasi serangan Cross-Site Scripting (XSS) dan injeksi data lainnya.
Implementasi Dasar
Untuk mengaktifkan CSP dengan konfigurasi default, gunakan sintaks berikut:
const express = require('express');
const helmet = require('helmet');
const app = express();
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "trusted-scripts.com"],
objectSrc: ["'none'"],
upgradeInsecureRequests: [],
},
},
}));Tabel Opsi Direktif CSP Utama
| Direktif | Deskripsi | Contoh Nilai |
|---|---|---|
| default-src | Fallback untuk direktif lain | 'self' |
| script-src | Sumber skrip yang diizinkan | 'self', 'unsafe-inline' |
| style-src | Sumber stylesheet yang diizinkan | 'self', 'fonts.googleapis.com' |
| img-src | Sumber gambar yang diizinkan | 'self', data: |
| connect-src | Target fetch/XHR | 'self', api.example.com |
| frame-ancestors | Izin embedding (Clickjacking) | 'none' |
Penjelasan Teknis Direktif
- 'self': Mengizinkan konten dari origin yang sama dengan aplikasi Anda.
- 'unsafe-inline': Mengizinkan skrip atau gaya inline. Gunakan dengan sangat hati-hati karena meningkatkan risiko XSS.
- 'none': Memblokir semua sumber untuk kategori tersebut.
- upgrade-insecure-requests: Menginstruksikan browser untuk mengubah semua permintaan HTTP menjadi HTTPS.
Tips Troubleshooting
Jika aplikasi Anda mendadak tidak bisa memuat aset, periksa Browser Console. CSP akan mencatat pelanggaran (violation) dengan pesan spesifik seperti "Refused to load the script...". Gunakan mode reportOnly: true pada konfigurasi Helmet jika Anda ingin menguji kebijakan tanpa memblokir konten secara langsung.
Pastikan untuk selalu membatasi domain pihak ketiga seminimal mungkin. Hindari penggunaan * (wildcard) pada direktif sensitif seperti script-src atau connect-src untuk menjaga integritas keamanan aplikasi Anda.