Lewati ke konten

Middleware Security Headers ​

Referensi: OWASP Secure Headers Project

Middleware Security Headers mengatur header keamanan HTTP yang melindungi aplikasi dari kerentanan umum seperti clickjacking, MIME type sniffing, dan serangan XSS. Aman secara bawaan, jadi memanggilnya tanpa opsi sudah menerapkan baseline yang kuat.

Penggunaan Dasar ​

Memanggil Mware.securityHeaders() tanpa opsi menerapkan default yang aman:

typescript
import { 
Mware
,
Router
} from '@neabyte/deserve'
const
router
= new
Router
()
// Terapkan header default yang aman
router
.
use
(
Mware
.
securityHeaders
())
await
router
.
serve
(8000)

Default mengatur header ini pada setiap response:

HeaderNilai default
Cross-Origin-Opener-Policysame-origin
Cross-Origin-Resource-Policysame-origin
Origin-Agent-Cluster?1
Referrer-Policyno-referrer
X-Content-Type-Optionsnosniff
X-DNS-Prefetch-Controloff
X-Download-Optionsnoopen
X-Frame-OptionsSAMEORIGIN
X-Permitted-Cross-Domain-Policiesnone

Berikan opsi untuk menimpa default atau mengaktifkan header yang tidak aktif sampai dikonfigurasi:

typescript
// Timpa default di mana perlu
router
.
use
(
Mware
.
securityHeaders
({
xFrameOptions
: 'DENY',
strictTransportSecurity
: 'max-age=31536000; includeSubDomains'
}) )

Security Headers Spesifik Rute ​

Terapkan security header berbeda ke rute tertentu:

typescript
// Header ketat untuk rute admin
router
.
use
(
'/admin',
Mware
.
securityHeaders
({
xContentTypeOptions
: 'nosniff',
xFrameOptions
: 'DENY',
referrerPolicy
: 'no-referrer',
strictTransportSecurity
: 'max-age=31536000; includeSubDomains'
}) ) // Lebih longgar untuk rute publik
router
.
use
(
'/api/public',
Mware
.
securityHeaders
({
xContentTypeOptions
: 'nosniff',
xFrameOptions
: 'SAMEORIGIN'
}) )

Opsi Konfigurasi ​

Setiap opsi header punya tiga bentuk. Nilai string mengatur header ke nilai itu. false menghilangkan header, bahkan yang punya default aman. Membiarkan opsi undefined mempertahankan default-nya ketika ada, atau melewatinya jika tidak. Tiga header tanpa default - contentSecurityPolicy, crossOriginEmbedderPolicy, dan strictTransportSecurity - tidak aktif sampai sebuah nilai diberikan.

contentSecurityPolicy ​

Content Security Policy (CSP) untuk mengontrol pemuatan resource:

typescript
contentSecurityPolicy: "default-src 'self'; script-src 'self' 'unsafe-inline'"

crossOriginEmbedderPolicy ​

Cross-Origin Embedder Policy (COEP):

typescript
crossOriginEmbedderPolicy: 'require-corp' // atau 'unsafe-none', 'credentialless'

crossOriginOpenerPolicy ​

Cross-Origin Opener Policy (COOP):

typescript
crossOriginOpenerPolicy: 'same-origin' // atau 'same-origin-allow-popups', 'unsafe-none'

crossOriginResourcePolicy ​

Cross-Origin Resource Policy (CORP):

typescript
crossOriginResourcePolicy: 'same-origin' // atau 'same-site', 'cross-origin'

originAgentCluster ​

Isolasi Origin Agent Cluster:

typescript
originAgentCluster: '?1'

referrerPolicy ​

Referrer Policy untuk mengontrol info referrer:

typescript
referrerPolicy: 'no-referrer' // atau 'strict-origin-when-cross-origin', dll.

strictTransportSecurity ​

HTTP Strict Transport Security (HSTS):

typescript
strictTransportSecurity: 'max-age=31536000; includeSubDomains'

xContentTypeOptions ​

Mencegah MIME type sniffing:

typescript
xContentTypeOptions: 'nosniff'

xDnsPrefetchControl ​

Mengontrol prefetch DNS:

typescript
xDnsPrefetchControl: 'off' // atau 'on'

xDownloadOptions ​

Mengontrol opsi unduhan berkas:

typescript
xDownloadOptions: 'noopen'

xFrameOptions ​

Mencegah serangan clickjacking:

typescript
xFrameOptions: 'DENY' // atau 'SAMEORIGIN', 'ALLOW-FROM uri'

xPermittedCrossDomainPolicies ​

Kebijakan lintas-domain untuk Flash:

typescript
xPermittedCrossDomainPolicies: 'none' // atau 'master-only', 'all'

Contoh Lengkap ​

typescript
import { 
Mware
,
Router
} from '@neabyte/deserve'
const
router
= new
Router
({
routes
: {
directory
: './routes' }
}) // Terapkan set header yang luas
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'
}) ) await
router
.
serve
(8000)

Catatan Penting ​

  • Aman secara bawaan: memanggil middleware tanpa opsi sudah menerapkan sembilan header baseline
  • Nilai string: mengatur header ke nilai persis itu, menimpa default mana pun
  • Diatur ke false: menghilangkan header, bahkan yang punya default
  • Undefined: mempertahankan default ketika header punya satu, jika tidak melewatinya
  • HSTS: terapkan strictTransportSecurity hanya pada server HTTPS
  • CSP: Content Security Policy bisa jadi kompleks, jadi uji dengan teliti

Dirilis di bawah Lisensi MIT.