Panduan Konfigurasi Helmet Content Security Policy (CSP) Express.js

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

DirektifDeskripsiContoh Nilai
default-srcFallback untuk direktif lain'self'
script-srcSumber skrip yang diizinkan'self', 'unsafe-inline'
style-srcSumber stylesheet yang diizinkan'self', 'fonts.googleapis.com'
img-srcSumber gambar yang diizinkan'self', data:
connect-srcTarget fetch/XHR'self', api.example.com
frame-ancestorsIzin 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.