Beveiliging afstemmen op Astro
Waar je op Astro de headers zet hangt af van je output. Een server-gerenderde (SSR) site kan ze in middleware zetten; een statische build serveert geen headers vanuit Astro, dus dan horen ze op de host. Hieronder per bevinding waar de fix woont.
Response-headers (HSTS, clickjacking, MIME-sniffing, referrer, permissions)
Draai je met een adapter (SSR), dan zet je ze in src/middleware, waar je de response na next() aanpast. Bij een statische build zet je ze in de header-config van je host (een _headers-bestand op Netlify of Cloudflare Pages, of vercel.json), want een statische pagina kent geen server om ze uit te sturen.
import { defineMiddleware } from 'astro:middleware';
export const onRequest = defineMiddleware(async (context, next) => {
const response = await next();
response.headers.set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload');
response.headers.set('X-Frame-Options', 'SAMEORIGIN');
response.headers.set('X-Content-Type-Options', 'nosniff');
response.headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');
response.headers.set('Permissions-Policy', 'camera=(), microphone=(), geolocation=()');
return response;
});/*
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()In de pagina (hash op een script, trackers na toestemming)
Een integrity-hash of het toestaan van een extern script hoort in de .astro-component die het script rendert. Trackers die pas na toestemming laden, regel je met een consent-manager of tag manager.
De verbinding (HTTPS en het certificaat)
HTTPS afdwingen en het certificaat regelt je host of CDN. Zorg dat http naar https doorstuurt en dat het certificaat geldig is en niet verlopen. De meeste hosts en CDN's doen dit met een schakelaar of een gratis Let's Encrypt-certificaat.
DNS-records (SPF, DMARC, DNSSEC, IPv6)
Deze staan los van je site: het zijn records bij je domein. Je zet ze bij je DNS-provider of domeinregistrar, niet in je CMS of op je host. SPF en DMARC gaan over wie mail namens je domein mag sturen, DNSSEC ondertekent je DNS, en IPv6 is de enige waar de host eerst een AAAA-record en verbinding moet aanbieden voordat je die kunt zetten.