Cyber Response Team
HTTP Security Headers
1. Inleiding
In de moderne digitale wereld is de veiligheid van webapplicaties cruciaal, ook voor lokale besturen die gevoelige informatie verwerken en diensten aan hun gemeenschap leveren. HTTP Security Headers spelen een belangrijke rol bij het versterken van de beveiliging van webapplicaties omdat ze extra beveiligingsmaatregelen toevoegen aan HTTP-responses. Deze headers helpen bij het beschermen van webapplicaties tegen verschillende aanvallen en kwetsbaarheden.Â
Via dit kennisartikel willen we een overzicht geven van de HTTP Security Headers die we lokale besturen aanbevelen te implementeren. Gezien de technische aard van dit artikel, zal dit voornamelijk nuttige informatie bieden voor onder andere domeinbeheerders en web ontwikkelaars. Â
2. Wat zijn HTTP Security Headers?Â
HTTP Security Headers zijn kleine stukjes informatie die door een webserver worden meegegeven als reactie op een HTTP-verzoek. Ze bevatten instructies voor de browser over hoe met de ontvangen webpagina om te gaan en welke beveiligingsmaatregelen toe te passen. Deze headers zijn van cruciaal belang om beveiligingsrisico’s te minimaliseren en te beschermen tegen aanvallen zoals Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), en andere potentiële bedreigingen. Â
3. HulpmiddelenÂ
Voor het implementeren en testen van HTTP Security Headers kunnen verschillende hulpmiddelen worden gebruikt. Enkele suggesties zijn:Â
Security Headers: dit is een online tool voor het analyseren van de HTTP Security Headers van een website.Â
Mozilla Observatory: dit is een web gebaseerde scanner voor veiligheidsconfiguraties. Â
4. De drie belangrijkste HTTP Security Headers voor lokale besturen
4.1. Content Security Policy (CSP)
Content Security Policy bepaalt welke bronnen mogen worden geladen op een webpagina. Dit voorkomt onder andere XSS-aanvallen door te beperken welke scripts en bronnen mogen worden uitgevoerd en geladen.Â
Een sterke Content-Security-Policy maakt volgende HTTP Headers overbodig:Â
X-XSS-Protection dmv het unsafe-inline attribuut.Â
X-Frame-Options dmv het frame-ancestors attribuut.
CSP AttributenÂ
De tabel hieronder biedt een overzicht van de belangrijkste CSP attributen, die elk een specifieke rol spelen in het beveiligen van uw webapplicatie tegen verschillende soorten aanvallen.Â
Â
Waarde | Omschrijving  |
base-uri | Definieer de basis-URI voor relatieve URI's. |
default-src | Definieer het laadbeleid voor alle resources in het geval dat de specifieke richtlijn voor een bepaald soort middelen niet is gedefinieerd (fallback). |
script-src | Definieer welke scripts de beschermde bron kan uitvoeren. |
object-src | Definieer vanwaar de beschermde bron plugins kan laden. |
style-src | Definieer welke stijlen (CSS) kunnen worden toegepast op de beschermde bron. |
img-src | Definieer waar vandaan de beschermde bron afbeeldingen kan laden. |
media-src | Definieer van waar de beschermde bron video en audio kan laden. |
frame-src | (Verouderd en vervangen door child-src) Definieer van waar de beschermde bron frames kan insluiten. |
child-src | Definieer waar de beschermde bron frames kan insluiten. |
frame-ancestors | Definieer van waar de beschermde bron kan worden ingesloten in frames. Dit attribuut vervangt de X-Frame-Options header. |
font-src | Definieer van waar de beschermde bron lettertypes kan laden. |
connect-src | Definieer welke URI's de beschermde bron kan laden met behulp van scriptinterfaces. |
manifest-src | Definieer vanwaar de beschermde bron manifests kan laden. |
form-action | Definieer welke URI's gebruikt kunnen worden als actie van HTML-formulierelementen. |
sandbox | Specificeer een HTML-sandbox policy dat de browser toepast op de beschermde bron. |
script-nonce | Definieer de uitvoering van het script door de aanwezigheid van de gespecificeerde nonce op scriptelementen te eisen. |
plugin-types | Definieer de set van plugins die kunnen worden aangeroepen door de beschermde bron door het beperken van de soorten bronnen die kunnen worden ingesloten. |
reflected-xss  | gereflecteerde cross-site scriptaanvallen te filteren of te blokkeren, gelijkwaardig aan de effecten van de niet-standaard X-XSS-Protection-header , te activeren of te deactiveren.  |
block-all-mixed-content  | Voorkom dat de gebruikersagent gemengde inhoud laadt.  |
upgrade-insecure-requests  | Instrueer de browser om onveilige HTTP-bronnen te downloaden met behulp van HTTPS.  |
report-uri  | (Afgeschreven en vervangen door report-to) Specificeert een URI waarnaar de gebruikersagent rapporten over beleidsovertredingen stuurt.  |
report-to  | Specificeert een groep (gedefinieerd in de Report-To header) waarnaar de gebruikersagent rapporten over beleidsovertredingen stuurt.  |
Â
Hulpmiddelen Â
Een aantal tools bieden de mogelijkheid om CSP headers te genereren, bijvoorbeeld:Â Â
4.2. HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security zorgt ervoor dat de communicatie tussen de browser en de server plaatsvindt over een beveiligde HTTPS-verbinding. Dit minimaliseert het risico van man-in-the-middle-aanvallen.Â
Waarde  | Omschrijving |
max-age=SECONDS  | De tijd, in seconden, dat de browser moet onthouden dat deze site alleen toegankelijk is via HTTPS.  |
includeSubDomains  | Als deze optionele parameter wordt gespecificeerd, geldt deze regel ook voor alle subdomeinen van de site.  Opgelet! HSTS activeren voor alle subdomeinen betekent dat deze, indien ze niet correct voorzien zijn van een geldig certificaat, niet meer toegankelijk zullen zijn.  |
Â
Voorbeeld Â
strict-transport-security: max-age=63113904 ; includeSubDomainsÂ
Â
Hulpmiddelen Â
4.3. X-Frame-OptionsÂ
De X-Frame-Options header voorkomt dat een webpagina wordt ingesloten binnen een iframe. Dit is essentieel om te voorkomen dat kwaadwillende websites uw inhoud insluiten, wat kan leiden tot clickjacking-aanvallen. De CSP frame-ancestors richtlijn is een geavanceerder en flexibeler alternatief voor de X-Frame-Options header en geniet de voorkeur vanwege zijn uitgebreidere capaciteiten. Wanneer beide headers aanwezig zijn, geven moderne browsers voorrang aan de CSP frame-ancestors richtlijn.Â
Waarde | Omschrijving |
deny | Voorkomt dat de pagina binnen enig frame geladen wordt, ongeacht de bron. |
sameorigin | Staat alleen toe dat de pagina binnen een frame geladen wordt als het frame op dezelfde oorsprong gehost is. |
allow-from uri | Deze specifieke waarde wordt niet meer algemeen ondersteund en moet met voorzichtigheid worden gebruikt. |
Â
Het is aanbevolen om de CSP frame-ancestors richtlijn te hanteren in plaats van de X-Frame-Options header voor een fijnmazigere controle. Als u echter besluit om X-Frame-Options te gebruiken, stel het dan in op de waarde "DENY" voor maximale beveiliging.Â
5. Additionele HTTP Security HeadersÂ
Permanente HTTPS Redirect: Gebruik een permanente redirect (HTTP status code 301) van HTTP naar HTTPS om Man-in-the-middle aanvallen te voorkomen.Â
HTTP Public Key Pinning (HPKP): Aanbevolen om niet meer te gebruiken vanwege belangrijke risico's en beperkingen.Â
X-Content-Type-Options: Voorkomt dat de browser bestanden interpreteert als een ander MIME-type dan gespecificeerd, met het 'nosniff' attribuut.Â
Permissions-Policy: Beperkt de functionaliteiten van browsers voor bepaalde webpagina's, zoals toegang tot de webcam, microfoon, locatieservices.Â
Referrer-Policy: Bepaalt welke referrer-informatie meegestuurd moet worden bij navigatie naar een andere website, ter bescherming van privacy en gevoelige gegevens.Â
Waarde | Omschrijving |
no-referrer | Er wordt geen referrer-informatie verzonden |
no-referrer-whendowngrade | Dit is het standaardgedrag als er geen beleid is ingesteld. De referrer wordt verzonden tenzij de navigatie van HTTPS naar HTTP gaat. |
origin  | Alleen het domein van de referrer wordt verzonden, niet het volledige pad.  |
origin-when-cross-origin  | Verzend de volledige URL als de bestemming op hetzelfde domein is, maar alleen het domein bij cross-origin verzoeken.  |
same-origin  | Verzend de referrer alleen bij navigatie binnen hetzelfde domein.  |
strict-origin  | Verzend alleen het domein van de referrer, en doe dit niet als de navigatie van HTTPS naar HTTP gaat.  |
strict-origin-when-cross-origin  | Combineert het gedrag van origin-when-cross-origin en strict-origin. |
unsafe-url  | Verzend de volledige URL, ongeacht de aard van de navigatie.  |
Â
Cross-origin Resource Sharing (CORS): Stelt webbrowsers in staat om veilige en gecontroleerde integraties tussen verschillende webdomeinen mogelijk te maken.
Â
CORS kan gezien worden als een uitbreiding op het gebruik van Referrer-Policy: same-origin om alsnog op een gecontroleerde manier communicatie met andere domeinen mogelijk te maken.Â
ReferentiesÂ
Subresource Integrity (SRI): Stelt browsers in staat om te controleren of opgehaalde resources, zoals scripts of stylesheets, niet zijn aangepast.
Â
ReferentiesÂ
Cookie Header: Helpt bij het beveiligen van cookies die worden gebruikt voor het opslaan van gebruikersdata op websites. Belangrijke opties zijn:Â
Secure: Zorgt ervoor dat cookies alleen over HTTPS verzonden worden.Â
HttpOnly: Voorkomt toegang tot cookies via JavaScript, wat beschermt tegen cross-site scripting (XSS) aanvallen.Â
SameSite: Beperkt hoe cookies worden verzonden bij cross-site requests om te beschermen tegen cross-site request forgery (CSRF) aanvallen. Heeft opties Strict, Lax, en None.Â
Max-Age en Expires: Bepaalt hoe lang een cookie geldig blijft.Â
6. ConclusieÂ
Het implementeren van deze HTTP Security Headers versterkt de beveiliging van lokale besturen tegen diverse webgebaseerde aanvallen. Het is van cruciaal belang om regelmatig de configuratie te controleren en bij te werken om de veiligheid te waarborgen in een steeds veranderend bedreigingslandschap.Â
Dit is een document voor publiek gebruik.