Zum Inhalt springen
Deutsch

Security-Header

securityHeaders() ergänzt ein sinnvolles Set an Security-Response-Headern. Jeder Header ist einzeln überschreibbar, false lässt einen weg, und ein vom Handler bereits gesetzter Header gewinnt immer.

import { securityHeaders, withMiddleware } from 'actor-ts/http';
const routes = withMiddleware(securityHeaders(), appRoutes);

Defaults: X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Referrer-Policy: no-referrer, Cross-Origin-Opener-Policy: same-origin, Cross-Origin-Resource-Policy: same-origin und X-XSS-Protection: 0 (der Legacy-Filter ist fehlerhaft — aus ist am sichersten). COEP, Permissions-Policy und HSTS sind opt-in.

Builder-MethodeDefault
withContentTypeOptions(flag?)nosniff an
withFrameOptions('DENY' | 'SAMEORIGIN' | false)'DENY'
withReferrerPolicy(value | false)'no-referrer'
withCrossOriginOpenerPolicy(v | false)'same-origin'
withCrossOriginResourcePolicy(v | false)'same-origin'
withCrossOriginEmbedderPolicy(v | false)false (bricht Embeds; opt-in)
withPermissionsPolicy(map | false)false
withHsts(options | false)false (opt-in)
const options = SecurityHeadersOptions.create()
.withFrameOptions('SAMEORIGIN')
.withHsts({ maxAge: 31_536_000, preload: true });

CSP ist bewusst nicht Teil des Bündels — es ist zu app-spezifisch; konfiguriere es mit contentSecurityPolicy.

import { strictTransportSecurity, HstsOptions, withMiddleware } from 'actor-ts/http';
const hsts = strictTransportSecurity(
HstsOptions.create().withMaxAge(31_536_000).withIncludeSubDomains().withPreload(),
);

Defaults: max-age 180 Tage + includeSubDomains. Der Header wird bedingungslos gesetzt — ein Browser ignoriert ihn über reines HTTP, ein Dev-Server ist also ein harmloser No-op, und Framework-Server sitzen ohnehin meist hinter einem TLS-terminierenden Proxy.

  • CSP — Content-Security-Policy.
  • CORS — Cross-Origin-Requests.
  • Sicherheit — der vollständige empfohlene Stack.