Middleware Security Headers
Referensi: OWASP Secure Headers Project
Middleware Security Headers menambah atau mengatur header HTTP yang disarankan untuk keamanan (mis. X-Frame-Options, CSP, HSTS). Berguna untuk mengurangi risiko clickjacking, MIME sniffing, dan serangan berbasis browser.
Penggunaan Dasar
Terapkan middleware security headers menggunakan middleware built-in Deserve:
// 1. Import Router dan Mware
import { Router, Mware } from '@neabyte/deserve'
// 2. Buat router
const router = new Router()
// 3. Pasang security headers (opsi per-header)
router.use(
Mware.securityHeaders({
xContentTypeOptions: 'nosniff',
xFrameOptions: 'DENY',
referrerPolicy: 'no-referrer'
})
)
// 4. Jalankan server
await router.serve(8000)Security Headers Per Rute
Terapkan security headers berbeda pada route tertentu:
// 1. Admin: header ketat + HSTS
router.use(
'/admin',
Mware.securityHeaders({
xContentTypeOptions: 'nosniff',
xFrameOptions: 'DENY',
referrerPolicy: 'no-referrer',
strictTransportSecurity: 'max-age=31536000; includeSubDomains'
})
)
// 2. Route publik: lebih longgar
router.use(
'/api/public',
Mware.securityHeaders({
xContentTypeOptions: 'nosniff',
xFrameOptions: 'SAMEORIGIN'
})
)Opsi Konfigurasi
Semua header bersifat opsional. Setiap opsi header dapat diatur ke nilai string untuk mengaktifkannya, false untuk menonaktifkannya secara eksplisit, atau biarkan undefined untuk melewatkannya sepenuhnya.
contentSecurityPolicy
Content Security Policy (CSP) untuk mengontrol pemuatan resource:
contentSecurityPolicy: "default-src 'self'; script-src 'self' 'unsafe-inline'"crossOriginEmbedderPolicy
Cross-Origin Embedder Policy (COEP):
crossOriginEmbedderPolicy: 'require-corp' // atau 'unsafe-none', 'credentialless'crossOriginOpenerPolicy
Cross-Origin Opener Policy (COOP):
crossOriginOpenerPolicy: 'same-origin' // atau 'same-origin-allow-popups', 'unsafe-none'crossOriginResourcePolicy
Cross-Origin Resource Policy (CORP):
crossOriginResourcePolicy: 'same-origin' // atau 'same-site', 'cross-origin'originAgentCluster
Isolasi Origin Agent Cluster:
originAgentCluster: '?1'referrerPolicy
Referrer Policy untuk mengontrol informasi referrer:
referrerPolicy: 'no-referrer' // atau 'strict-origin-when-cross-origin', dll.strictTransportSecurity
HTTP Strict Transport Security (HSTS):
strictTransportSecurity: 'max-age=31536000; includeSubDomains'xContentTypeOptions
Mencegah MIME type sniffing:
xContentTypeOptions: 'nosniff'xDnsPrefetchControl
Mengontrol DNS prefetching:
xDnsPrefetchControl: 'off' // atau 'on'xDownloadOptions
Mengontrol opsi unduhan file:
xDownloadOptions: 'noopen'xFrameOptions
Mencegah serangan clickjacking:
xFrameOptions: 'DENY' // atau 'SAMEORIGIN', 'ALLOW-FROM uri'xPermittedCrossDomainPolicies
Kebijakan cross-domain untuk Flash:
xPermittedCrossDomainPolicies: 'none' // atau 'master-only', 'all'xPoweredBy
Hapus atau kustomisasi header X-Powered-By:
xPoweredBy: false // Hapus header
xPoweredBy: 'Custom' // Atur nilai kustomContoh Lengkap
// 1. Import Router dan Mware
import { Router, Mware } from '@neabyte/deserve'
// 2. Buat router
const router = new Router({ routesDir: './routes' })
// 3. Pasang security headers (semua opsi)
router.use(
Mware.securityHeaders({
xContentTypeOptions: 'nosniff',
xFrameOptions: 'DENY',
referrerPolicy: 'no-referrer',
xDnsPrefetchControl: 'off',
strictTransportSecurity: 'max-age=31536000; includeSubDomains',
contentSecurityPolicy: "default-src 'self'",
crossOriginOpenerPolicy: 'same-origin',
crossOriginResourcePolicy: 'same-origin'
})
)
// 4. Jalankan server
await router.serve(8000)Catatan Penting
- Semua header opsional: Header hanya diatur jika Anda secara eksplisit memberikan nilai
- Set ke
false: Secara eksplisit menonaktifkan header yang mungkin diatur di tempat lain - Undefined: Lewati pengaturan header sepenuhnya
- X-Powered-By: Set ke
falseuntuk menghapus, string untuk menyesuaikan - HSTS: Hanya gunakan
strictTransportSecuritypada server HTTPS - CSP: Content Security Policy bisa kompleks - uji dengan teliti