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 oplossing zit.
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 heeft geen server die ze kan meesturen.
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 toestemmingsplatform of tagmanager.
De verbinding (HTTPS en het certificaat)
HTTPS afdwingen en het certificaat regel je bij 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 waarvoor je host eerst IPv6 moet ondersteunen voordat je het AAAA-record kunt zetten.