Security headers er HTTP response headers, der instruerer browsere i, hvordan de skal håndtere dit sites indhold. De er en af de hurtigste måder at hærde et website på: nogle få linjer serverkonfiguration, der lukker hele kategorier af angreb — cross-site scripting, clickjacking, MIME sniffing og datalæk.
Denne guide dækker alle headers, der er værd at implementere i 2026, med anbefalede værdier og begrundelsen bag dem.
Hvorfor headers er vigtige
De fleste webangreb udnytter ikke nye zero-days — de udnytter forudsigelig browseradfærd. Security headers ændrer disse standardindstillinger. En browser, der ved, at dit site kun bør loade scripts fra dit eget domæne, vil nægte at eksekvere et injiceret tredjepartsscript, selv hvis din server var kompromitteret nok til at servere det.
At tilføje de rigtige headers tager 30 minutter. At lade være efterlader dine brugere eksponeret for angreb, der har eksisteret i 20 år.
De essentielle headers
1. Strict-Transport-Security (HSTS)
Tvinger browsere til kun at forbinde til dit site over HTTPS, selv hvis brugeren skriver http://. Eliminerer protocol-downgrade og SSL-stripping angreb.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age=31536000— husk denne policy i 1 årincludeSubDomains— anvend på alle subdomænerpreload— tilmeld dig browserens preload-lister (hardcoded HTTPS før den første forespørgsel)
Inden du tilføjer preload: sørg for, at alle subdomæner serverer HTTPS. Når du er på preload-listen, er HTTP-adgang permanent utilgængelig, indtil du fjernes (hvilket tager uger).
Se også: HSTS
2. Content-Security-Policy (CSP)
Den mest kraftfulde — og mest komplekse — security header. CSP definerer en allowlist over kilder til scripts, stylesheets, billeder, fonts og mere. Enhver ressource, der ikke er på listen, blokeres af browseren.
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.posthog.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self';
connect-src 'self' https://api.posthog.com;
frame-ancestors 'none';
base-uri 'self';
form-action 'self'
Start med report-only mode:
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
Dette logger overtrædelser uden at blokere noget, så du kan finjustere din policy, før du håndhæver den.
Vigtige directives:
default-src 'self'— baseline: load kun fra din egen originscript-src— styrer JavaScript-kilder; undgå'unsafe-inline'og'unsafe-eval'frame-ancestors 'none'— erstatter X-Frame-Options; forhindrer din side i at blive embeddedbase-uri 'self'— forhindrer base-tag injection angrebform-action 'self'— forhindrer formularer i at poste til angriberkontrollerede URL'er
3. X-Content-Type-Options
Forhindrer browsere i at MIME-sniffe et response væk fra den erklærede content type. Stopper en uploadet .txt-fil fra at blive eksekveret som JavaScript.
X-Content-Type-Options: nosniff
Ingen konfiguration nødvendig. Tilføj den bare. Der er ingen grund til at lade være.
4. X-Frame-Options
Forhindrer din side i at blive embedded i en <iframe>, hvilket beskytter mod clickjacking-angreb, hvor en angriber lægger en usynlig kopi af din side ovenpå for at stjæle klik.
X-Frame-Options: DENY
Eller brug SAMEORIGIN, hvis du har brug for at embedde dine egne sider i iframes. Bemærk: hvis du implementerer CSP med frame-ancestors, har den forrang i moderne browsere og er mere fleksibel — men X-Frame-Options dækker stadig ældre browsere.
Se også: Clickjacking
5. Referrer-Policy
Styrer hvor meget af URL'en der deles i Referer-headeren, når brugere navigerer væk fra dit site. URL'er kan indeholde følsomme data — session tokens, bruger-ID'er, søgetermer.
Referrer-Policy: strict-origin-when-cross-origin
Dette sender den fulde URL for same-origin forespørgsler (nyttigt til analytics), men kun origin (https://yourdomain.com) for cross-origin forespørgsler.
Se også: Referrer Policy
6. Permissions-Policy
Begrænser hvilke browser-API'er der er tilgængelige for siden og embedded iframes. Forhindrer tredjepartsscripts i lydløst at tilgå kamera, mikrofon eller geolocation.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(self)
Den tomme ()-syntaks deaktiverer funktionen helt. List kun de funktioner, dit site aktivt bruger.
Se også: Permissions Policy
7. Cross-Origin headers (COOP, COEP, CORP)
Denne trio isolerer dit dokument fra andre origins på et dybere niveau, aktiverer funktioner som SharedArrayBuffer og beskytter mod Spectre-klasse side-channel angreb.
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Resource-Policy: same-origin
Advarsel: COEP (require-corp) er strikt — enhver cross-origin ressource, der ikke inkluderer en Cross-Origin-Resource-Policy-header, vil blive blokeret. Test grundigt i staging først.
Hurtig implementering efter platform
Vercel (vercel.json)
{
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "Strict-Transport-Security", "value": "max-age=31536000; includeSubDomains" },
{ "key": "X-Content-Type-Options", "value": "nosniff" },
{ "key": "X-Frame-Options", "value": "DENY" },
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
{ "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
]
}
]
}
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Nuxt 3 (nuxt.config.ts)
routeRules: {
'/**': {
headers: {
'X-Content-Type-Options': 'nosniff',
'X-Frame-Options': 'DENY',
'Referrer-Policy': 'strict-origin-when-cross-origin',
}
}
}
Tjekliste til vurdering af security headers
[ ] Strict-Transport-Security til stede med max-age >= 1 år
[ ] X-Content-Type-Options: nosniff
[ ] X-Frame-Options: DENY eller SAMEORIGIN (eller CSP frame-ancestors)
[ ] Referrer-Policy sat (ikke unsafe-url)
[ ] Permissions-Policy begrænser ubrugte funktioner
[ ] Content-Security-Policy på plads (eller i det mindste Report-Only)
[ ] Ingen Server- eller X-Powered-By-headers der lækker versionsinfo
Tjek dine headers med Sitecheck
Sitechecks security scanner tjekker automatisk alle ovenstående headers og vurderer hver enkelt — gratis, ingen login påkrævet. Kør en scanning på din forside for at se præcis, hvilke headers der mangler, og hvilke værdier der anbefales.
Oversigtstabel
| Header | Beskytter mod | Kompleksitet |
|---|---|---|
| HSTS | Protocol downgrade, SSL stripping | Lav |
| X-Content-Type-Options | MIME sniffing | Lav |
| X-Frame-Options | Clickjacking | Lav |
| Referrer-Policy | Datalæk via Referer | Lav |
| Permissions-Policy | Misbrug af funktioner af tredjepartsscripts | Mellem |
| CSP | XSS, injection, resource hijacking | Høj |
| COOP/COEP/CORP | Spectre-klasse side-channel angreb | Høj |
Start med headers med lav kompleksitet i dag. Tilføj CSP i report-only mode, finjuster den over en uge, og håndhæv den derefter. Det fulde setup tager en eftermiddag og beskytter dine brugere på ubestemt tid.