Security-Headers: Die vergessene DSGVO-Pflicht
Security-Headers wie HSTS, CSP und Referrer-Policy sind laut Art. 32 DSGVO Pflicht. Erfahre, welche Header du brauchst und wie du sie einrichtest.
Wenn Website-Betreiber an DSGVO denken, denken sie an Cookie-Banner, Datenschutzerklärungen und Einwilligungen. Was die wenigsten auf dem Schirm haben: Art. 32 DSGVO verlangt “geeignete technische Maßnahmen” zum Schutz personenbezogener Daten. Dazu gehören auch HTTP Security-Headers — und die fehlen auf erschreckend vielen Websites.
In diesem Artikel erklären wir, warum Security-Headers eine DSGVO-Pflicht sind, welche Header du brauchst und wie du sie einrichtest.
Warum Security-Headers eine DSGVO-Pflicht sind
Art. 32 DSGVO schreibt vor, dass Verantwortliche “geeignete technische und organisatorische Maßnahmen” treffen müssen, um ein dem Risiko angemessenes Schutzniveau zu gewährleisten. Die Norm nennt explizit:
- Die Verschlüsselung personenbezogener Daten
- Die Fähigkeit, die Vertraulichkeit und Integrität der Systeme sicherzustellen
- Die Fähigkeit, die Verfügbarkeit der Daten rasch wiederherzustellen
Security-Headers sind grundlegende technische Maßnahmen, die genau diese Ziele unterstützen. Sie schützen vor Man-in-the-Middle-Angriffen, Cross-Site-Scripting (XSS), Clickjacking und Datenabfluss. Fehlen sie, ist das eine Lücke im technischen Schutz — und damit ein potentieller DSGVO-Verstoß.
Das Bundesamt für Sicherheit in der Informationstechnik (BSI) empfiehlt Security-Headers ausdrücklich in seinen technischen Richtlinien. Und Datenschutzbehörden berücksichtigen den technischen Schutzstandard bei der Bewertung von Datenschutzverletzungen.
Die wichtigsten Security-Headers erklärt
Strict-Transport-Security (HSTS)
HSTS zwingt den Browser, die Website ausschließlich über HTTPS aufzurufen. Selbst wenn ein Nutzer http:// eingibt, wird er automatisch auf https:// umgeleitet — und zwar direkt im Browser, ohne dass überhaupt eine unverschlüsselte Anfrage gesendet wird.
Warum wichtig: Ohne HSTS kann ein Angreifer in einem öffentlichen WLAN die erste HTTP-Anfrage abfangen und den Nutzer auf eine gefälschte Seite umleiten (SSL-Stripping). Alle danach eingegebenen Daten (Passwörter, persönliche Daten) wären kompromittiert.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age=31536000: Browser merkt sich die HTTPS-Pflicht für ein JahrincludeSubDomains: Gilt auch für alle Subdomainspreload: Erlaubt die Aufnahme in die Browser-Preload-Liste
Content-Security-Policy (CSP)
Die CSP ist der mächtigste Security-Header. Sie definiert, welche Ressourcen (Scripts, Styles, Bilder, Fonts) auf deiner Website geladen werden dürfen und von welchen Quellen.
Warum wichtig: CSP ist der effektivste Schutz gegen Cross-Site-Scripting (XSS). Wenn ein Angreifer bösartigen JavaScript-Code einschleust, blockiert eine strenge CSP die Ausführung, weil der Code nicht von einer erlaubten Quelle stammt.
Content-Security-Policy: default-src 'self';
script-src 'self' https://cdn.compliso.de;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self';
connect-src 'self' https://api.compliso.de;
frame-ancestors 'none';
Tipp: Starte mit einer Report-Only-Policy und beobachte, welche Ressourcen blockiert würden. So kannst du die CSP schrittweise verschärfen, ohne die Website versehentlich kaputtzumachen:
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
X-Frame-Options
Verhindert, dass deine Website in einem <iframe> auf einer fremden Seite eingebettet wird.
Warum wichtig: Ohne diesen Header kann ein Angreifer deine Website in einem unsichtbaren iFrame einbetten und Nutzer dazu bringen, unwissentlich Aktionen auszuführen (Clickjacking). Beispiel: Ein unsichtbarer iFrame über einem “Hier klicken”-Button könnte den Nutzer dazu bringen, in deiner App eine Einstellung zu ändern.
X-Frame-Options: DENY
DENY: Kein Einbetten erlaubtSAMEORIGIN: Nur Einbetten von der eigenen Domain erlaubt
X-Content-Type-Options
Verhindert, dass der Browser den MIME-Typ einer Datei “errät” (MIME-Sniffing).
Warum wichtig: Ohne diesen Header könnte ein Browser eine als Bild hochgeladene Datei als JavaScript interpretieren und ausführen. Das ist ein klassischer Angriffsvektor: Der Angreifer lädt eine Datei mit bösartigem JavaScript hoch, benennt sie als .jpg, und der Browser führt den Code aus.
X-Content-Type-Options: nosniff
Referrer-Policy
Steuert, welche Informationen im Referrer-Header an andere Websites gesendet werden, wenn ein Nutzer einen Link klickt.
Warum wichtig: Der Referrer-Header kann sensible Informationen enthalten — zum Beispiel URLs mit Session-IDs, Suchbegriffen oder internen Pfaden. Ohne Referrer-Policy werden diese Daten an jede verlinkte externe Website gesendet.
Referrer-Policy: strict-origin-when-cross-origin
Diese Einstellung sendet bei Anfragen an andere Domains nur die Origin (z.B. https://example.com), nicht den vollständigen Pfad.
Permissions-Policy
Steuert, welche Browser-Features (Kamera, Mikrofon, Geolocation) deine Website und eingebettete iFrames nutzen dürfen.
Warum wichtig: Ohne diesen Header könnten eingebettete Drittanbieter-Scripts unbemerkt auf Kamera oder Mikrofon zugreifen. Die Permissions-Policy schließt diese Möglichkeit aus.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
Die leeren Klammern () bedeuten: Niemandem erlaubt, nicht einmal der eigenen Seite.
Checkliste: Security-Headers für deine Website
- HSTS mit
max-agevon mindestens einem Jahr - Content-Security-Policy definiert (mindestens
default-src 'self') - X-Frame-Options auf
DENYoderSAMEORIGIN - X-Content-Type-Options auf
nosniff - Referrer-Policy auf
strict-origin-when-cross-originoder strenger - Permissions-Policy schränkt unnötige APIs ein
So richtest du Security-Headers ein
Apache (.htaccess)
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "DENY"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'"
</IfModule>
Nginx
add_header Strict-Transport-Security "max-age=31536000; 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;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'" always;
Wichtig: Teste nach dem Einrichten gründlich! Eine zu strenge CSP kann dafür sorgen, dass externe Ressourcen (Google Analytics, Fonts, eingebettete Videos) nicht mehr laden. Passe die Policy schrittweise an.
Security-Headers automatisch prüfen
Du bist dir nicht sicher, welche Security-Headers deine Website aktuell setzt? Der Compliso Scanner prüft automatisch alle relevanten Security-Headers und bewertet sie:
- Fehlende Header werden als Risiko markiert
- Schwache Konfigurationen werden erkannt (z.B. zu kurzer HSTS max-age)
- Du erhältst konkrete Empfehlungen zur Verbesserung
Erfahre mehr über die Security-Checks von Compliso oder scanne deine Website jetzt kostenlos und erfahre in Sekunden, wie es um deine Security-Headers steht.
Deine Website DSGVO-konform machen?
Compliso prüft deine Website automatisch auf Cookies, Tracker, Dark Patterns und Accessibility-Probleme.