Wie diese Prüfung funktioniert
Scanaris ruft deine Startseite so ab, wie es ein Browser täte, und liest die Header der Antwort. Es sucht sechs bestimmte Header und öffnet für jeden fehlenden einen Fund mit einem empfohlenen Wert: Content-Security-Policy, Strict-Transport-Security und X-Frame-Options mit mittlerem Schweregrad, X-Content-Type-Options, Referrer-Policy und Permissions-Policy mit niedrigem. Die Qualität der CSP oder des HSTS wird hier nicht bewertet: Das übernehmen die Prüfungen schwache CSP und schwaches HSTS. Betrachtet wird nur die Antwort der gescannten URL; lebt deine API auf einer anderen Domain, scanne sie separat.
Was jeder Header schützt
- Content-Security-Policy begrenzt, von wo Skripte, Styles und Bilder geladen werden dürfen. Sie ist die Hauptverteidigung gegen Skript-Injektion (XSS).
- Strict-Transport-Security zwingt den Browser, mit deiner Domain immer HTTPS zu verwenden, auch wenn jemand die Adresse ohne s eintippt.
- X-Frame-Options verhindert, dass deine Website in einen fremden iframe eingebettet wird, die Grundlage von Clickjacking.
- X-Content-Type-Options: nosniff hält den Browser davon ab, den Typ einer Datei zu „erraten" und etwas als Skript auszuführen, das keines war.
- Referrer-Policy steuert, wie viel der URL an andere Websites geschickt wird, wenn ein Nutzer auf einen Link klickt.
- Permissions-Policy deaktiviert Browser-APIs, die du nicht nutzt, etwa Kamera, Mikrofon oder Standort.
Wie du sie je nach Hosting hinzufügst
Vercel
In der vercel.json oder, bei Next.js, in der next.config mit der Funktion headers():
{
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "Strict-Transport-Security", "value": "max-age=63072000; includeSubDomains; preload" },
{ "key": "X-Frame-Options", "value": "DENY" },
{ "key": "X-Content-Type-Options", "value": "nosniff" },
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
{ "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
]
}
]
}
Netlify
Eine Datei _headers im veröffentlichten Ordner:
/*
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
Nuxt
In der nuxt.config, innerhalb von routeRules, die Regel '/**' mit einem headers-Objekt und denselben Schlüssel-Wert-Paaren. Genau so macht es Scanaris.
Express
import helmet from 'helmet';
app.use(helmet());
nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Die Content-Security-Policy fehlt in den Beispielen absichtlich: Sie hängt davon ab, welche Skripte und Dienste deine Website lädt, und startet am besten im Report-Modus. Das Vorgehen steht in HTTP-Sicherheits-Header für Menschen erklärt.
Prüf, ob sie da sind
curl -sI https://deinedomain.com | grep -iE "strict-transport|x-frame|x-content-type|referrer-policy|permissions-policy|content-security"
Alle sechs Zeilen müssen erscheinen. Hast du ein CDN vor dem Server, prüf die öffentliche URL, denn manche CDNs entfernen oder überschreiben Header. Der Header-Analyzer liest dasselbe aus, mit Erklärung je Header.
Häufige Fragen
X-Frame-Options oder frame-ancestors?
Beide tun dasselbe; frame-ancestors innerhalb der CSP ist die moderne Variante und erlaubt, konkrete Domains aufzulisten. Behalte X-Frame-Options zusätzlich für ältere Browser; sie stören sich nicht.
Kann ich die Website mit diesen Headern kaputtmachen?
Die fünf aus den Beispielen machen auf einer normalen Website nichts kaputt. Riskant ist nur die CSP, deshalb kommt sie zuerst als Content-Security-Policy-Report-Only und wird auf Blockieren umgestellt, wenn die Berichte sauber sind.
Braucht HSTS preload?
Nicht, um die Prüfung zu bestehen. preload nimmt deine Domain in die Liste auf, die Browser ab Werk mitbringen; das ist eine langfristige Verpflichtung (deine ganze Domain samt Subdomains für immer auf HTTPS), also aktiviere es nur, wenn du sicher bist.