Zum Inhalt springen
Planen wir gemeinsam die passende Software für Ihre Prozesse. Demo oder Angebot: +90 546 737 48 29

TR EN DE

Sicherheitsheader und HTTPS

Sicherheitsheader sind kurze Anweisungen, die der Server mit jeder Antwort an den Browser sendet: „Verbinde dich mit dieser Website nur über HTTPS“, „Zeige diese Seite nicht im Frame anderer Websites an“, „Führe Skripte nur aus diesen Quellen aus“. Sie werden mit wenigen Zeilen Konfiguration gesetzt, ohne dass Sie Ihren Code ändern müssen, und aktivieren die eingebauten Schutzfunktionen des Browsers.

Header schließen keine Schwachstellen im Code; sie sind die zweite Schicht, die den Schaden begrenzt, wenn ein Fehler passiert. Diese Anleitung beschreibt zuerst, wie HTTPS erzwungen wird, und danach, wozu jeder Header dient und wie er in Apache gesetzt wird. Was SSL ist, erklärt die Anleitung Was ist SSL?.

Kurz gefasst

  • Der gesamte Datenverkehr wird per 301 auf HTTPS umgeleitet.
  • HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy und Permissions-Policy lassen sich mit wenigen Zeilen setzen.
  • Die CSP startet zunächst im Report-Only-Modus und wird durchgesetzt, sobald die Verstöße behoben sind.
  • HSTS darf nicht mit langer Laufzeit aktiviert werden, bevor es mit kurzer Laufzeit getestet wurde.

Achtung

Die Beispiele gelten für Apache 2.4 und mod_headers. Testen Sie die Header vor dem Einsatz in einer Testumgebung oder zu einer Zeit mit wenig Datenverkehr; insbesondere falsch eingestellte HSTS- und CSP-Header können die Website unerreichbar machen oder fehlerhaft darstellen.

Auf dieser Seite

Umsetzung in vier Schritten

  1. Leiten Sie den gesamten Datenverkehr auf HTTPS um

    Bleibt die http://-Adresse der Website nach der Installation des Zertifikats erreichbar, können sich Besucher weiterhin unverschlüsselt verbinden. Leiten Sie alle Anfragen mit einer permanenten Weiterleitung (301) auf HTTPS um.

    .htaccess (Apache)
    RewriteEngine On
    
    # Für Anfragen, die direkt beim Server ankommen
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # Hinter einem CDN / Reverse Proxy statt der obigen Bedingung:
    # RewriteCond %{HTTP:X-Forwarded-Proto} =http
    # RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Steht Ihre Website hinter einem CDN oder einem Reverse Proxy (z. B. Cloudflare), sieht Ihr Server die Anfrage möglicherweise als HTTP, und diese Regel kann zu einer Endlosweiterleitung führen. Richten Sie die Weiterleitung in diesem Fall im CDN-Panel ein oder verwenden Sie in der Bedingung den Header X-Forwarded-Proto.

    Ablaufdiagramm: Die http-Anfrage wird per 301 auf die https-Adresse umgeleitet; HSTS lässt den Browser bei späteren Besuchen direkt https verwenden : Vergrößern
  2. Setzen Sie die grundlegenden Header

    Der folgende Block enthält Header, die sich bei nahezu jeder Website gefahrlos setzen lassen. Fügen Sie ihn in die .htaccess-Datei im Web-Root ein.

    .htaccess (Apache)
    <IfModule mod_headers.c>
        # Nur in HTTPS-Antworten: Der Browser soll sich mit dieser Website immer über HTTPS verbinden.
        # Zuerst mit max-age=300 testen; ohne Probleme auf 31536000 (1 Jahr) erhöhen.
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" "expr=%{HTTPS} == 'on'"
    
        # Dateityp nicht erraten
        Header always set X-Content-Type-Options "nosniff"
    
        # Anzeige im Frame anderer Websites
        Header always set X-Frame-Options "SAMEORIGIN"
    
        # An andere Websites nur die Domain weitergeben
        Header always set Referrer-Policy "strict-origin-when-cross-origin"
    
        # Nicht genutzte Browserfunktionen abschalten
        Header always set Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()"
    </IfModule>
    Schaubild: Sicherheitsheader und ihre Aufgaben; HSTS, CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy : Vergrößern
  3. Starten Sie die CSP im Report-Only-Modus

    Die Content-Security-Policy ist der wirkungsvollste Header, verlangt aber auch die meiste Sorgfalt. Setzen Sie sie zunächst unter dem Namen Content-Security-Policy-Report-Only: Es wird nichts blockiert, Verstöße erscheinen in der Browserkonsole. Erst wenn Sie die Verstöße behoben haben, setzen Sie die Richtlinie durch.

    Ablaufdiagramm: CSP im Report-Only-Modus, Verstöße auswerten, Richtlinie korrigieren, Richtlinie durchsetzen : Vergrößern
  4. Überprüfen Sie das Ergebnis

    Wählen Sie in den Entwicklertools des Browsers im Tab „Netzwerk“ die Anfrage für die Seite aus und sehen Sie sich die Antwort-Header an, oder rufen Sie die Header über die Kommandozeile ab. Kontrollieren Sie, dass die Header nicht nur auf der Startseite, sondern auch auf Fehlerseiten und Unterseiten gesendet werden.

    Kommandozeile
    # Antwort-Header anzeigen (mit Ihrer eigenen Domain)
    curl -sI https://www.example.com/
    
    # Prüfen, ob die HTTP-Adresse auf HTTPS umgeleitet wird
    curl -sI http://www.example.com/ | grep -i -E "^(HTTP|location)"
    Checkliste: https-Weiterleitung, HSTS, nosniff, Frame-Schutz, Referrer, Permissions, CSP : Vergrößern

Anzeichen: Woran erkennt man fehlende Header?

  • Die http://-Adresse der Website öffnet sich, ohne auf HTTPS umgeleitet zu werden.
  • In der Browserkonsole erscheinen Warnungen zu „gemischten Inhalten“ (Mixed Content): Die HTTPS-Seite lädt Bilder oder Skripte über HTTP.
  • In den Antwort-Headern fehlen Strict-Transport-Security, X-Content-Type-Options oder Content-Security-Policy.
  • Ihre Website lässt sich innerhalb einer anderen Website als Frame (iframe) öffnen.
  • In der Antwort verraten X-Powered-By oder ein ausführlicher Server-Header die Versionsnummer.

Die Header im Einzelnen

Strict-Transport-Security (HSTS)

Der Header weist den Browser an, sich für die angegebene Dauer mit dieser Domain ausschließlich über HTTPS zu verbinden. Selbst wenn der Benutzer die Adresse mit http:// eingibt, wandelt der Browser die Anfrage vor dem Senden in HTTPS um; so wird verhindert, dass der unverschlüsselte Moment der ersten Anfrage von jemandem ausgenutzt wird, der sich in die Verbindung einschaltet.

  • Er darf nur in HTTPS-Antworten gesendet werden.
  • Testen Sie zunächst mit einer kurzen Dauer (z. B. max-age=300); treten keine Probleme auf, erhöhen Sie auf ein Jahr (31536000).
  • includeSubDomains schließt alle Subdomains ein. Vergewissern Sie sich vorher, dass Sie keine Subdomain haben, die HTTPS nicht unterstützt.
  • preload dient dazu, die Domain in die fest eingebaute Liste der Browser aufnehmen zu lassen, und lässt sich nur schwer rückgängig machen; setzen Sie es nicht, wenn Sie nicht sicher sind.

X-Content-Type-Options

Der Wert nosniff verhindert, dass der Browser den Typ einer Datei anhand ihres Inhalts errät. So wird zum Beispiel verhindert, dass eine als Bild hochgeladene Datei wie ein Skript interpretiert wird. Nebenwirkungen gibt es so gut wie keine; der Header sollte auf jeder Website gesetzt sein.

X-Frame-Options und frame-ancestors

Diese Header verhindern, dass Ihre Website im Frame einer anderen Website angezeigt wird. Das schützt davor, dass der Benutzer über einen unsichtbaren Frame unbemerkt zu einem Klick verleitet wird (Clickjacking). SAMEORIGIN erlaubt das Einbetten nur durch Ihre eigene Website. Das zeitgemäße Gegenstück ist die CSP-Direktive frame-ancestors; beide zusammen zu senden, deckt alte und neue Browser ab.

Referrer-Policy

Der Header legt fest, welche Adressinformation der Browser weitergibt, wenn ein Besucher von Ihrer Website zu einer anderen wechselt. strict-origin-when-cross-origin ist ein ausgewogener Wert: An andere Websites geht nur Ihre Domain, nicht aber der Seitenpfad und die Parameter.

Permissions-Policy

Der Header legt fest, ob die Seite und die darin eingebetteten Frames Browserfunktionen wie Kamera, Mikrofon oder Standort nutzen dürfen. Funktionen abzuschalten, die Sie nicht verwenden, verhindert, dass ein fremdes, in die Seite gelangtes Skript sie anfordert. Gibt es auf Ihrer Website eine Karten- oder Standortfunktion, lassen Sie die betreffende Berechtigung für Ihre eigene Quelle aktiviert.

Content-Security-Policy Schritt für Schritt

Die CSP definiert, aus welchen Quellen die Seite Inhalte laden darf. Die wichtigsten Direktiven:

  • default-src: Standardquelle für alle Typen, die in den übrigen Direktiven nicht genannt sind.
  • script-src: Quellen, aus denen Skripte geladen werden dürfen. Diese Direktive liefert den eigentlichen Schutz gegen XSS.
  • style-src, img-src, font-src, connect-src: Stylesheets, Bilder, Schriftarten und Hintergrundanfragen.
  • frame-ancestors: Wer die Seite in einen Frame einbetten darf.
  • object-src 'none' und base-uri 'self': Verhindern alte Plugin-Inhalte und die Manipulation des <base>-Tags.
  • form-action: Adressen, an die Formulare gesendet werden dürfen.

Eine Richtlinie im Report-Only-Modus für den Einstieg:

.htaccess (Apache)
<IfModule mod_headers.c>
    Header always set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'"
</IfModule>

Passen Sie die Richtlinie anhand der Verstöße in der Konsole an: Tragen Sie die externen Quellen, die Sie verwenden (Schriftarten, Analyse, Karten), einzeln in die jeweilige Direktive ein. Inline-Skripte und Event-Attribute wie onclick in eigene Dateien auszulagern, ermöglicht es Ihnen, den Wert 'unsafe-inline' aus der Direktive script-src zu entfernen; darin liegt der eigentliche Wert der CSP gegen XSS. Treten keine Verstöße mehr auf, schalten Sie den Header in den durchsetzenden Modus:

.htaccess (Apache)
<IfModule mod_headers.c>
    # Nachdem die Verstöße behoben sind: dieselbe Richtlinie, diesmal durchgesetzt
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'"
</IfModule>

Für Inline-Skripte, die sich nicht auslagern lassen, kann ein nonce-Wert verwendet werden, der bei jeder Antwort neu erzeugt wird; in diesem Fall sendet PHP den Header.

PHP
<?php
// Bei jeder Antwort wird ein neuer Nonce erzeugt
$nonce = base64_encode(random_bytes(16));
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-$nonce'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'");
?>
<script nonce="<?= htmlspecialchars($nonce, ENT_QUOTES, 'UTF-8') ?>">
    // Nur Inline-Skripte mit diesem Nonce-Wert werden ausgeführt
    document.documentElement.classList.add('js');
</script>

Versionsangaben reduzieren

Dass in den Antwort-Headern die PHP- und die Serverversion sichtbar sind, ist für sich genommen keine Schwachstelle, liefert automatisierten Scans aber unnötige Informationen. Für PHP entfernt die Einstellung expose_php = Off den Header X-Powered-By. Die Ausführlichkeit des Server-Headers von Apache wird in der Serverkonfiguration mit ServerTokens verringert; beim Shared Hosting liegt diese Einstellung beim Anbieter.

.htaccess (Apache)
<IfModule mod_headers.c>
    Header always unset X-Powered-By
    Header unset X-Powered-By
</IfModule>

# In php.ini oder .user.ini:
# expose_php = Off

Der eigentliche Schutz besteht nicht darin, die Version zu verbergen, sondern darin, sie aktuell zu halten.

Häufige Fehler

  • HSTS mit langer Laufzeit und ungetestet aktivieren: Tritt ein Zertifikatsproblem auf, kommen Besucher überhaupt nicht mehr auf die Website; bis zum Ablauf der Laufzeit lässt sich das nicht zurücknehmen.
  • In der CSP alles erlauben: Eine Richtlinie wie script-src * 'unsafe-inline' 'unsafe-eval' bietet keinen Schutz.
  • Header nur in PHP senden: Bei Bildern, Fehlerseiten und statischen Dateien fehlen die Header dann. Sie in der Serverkonfiguration zu definieren, deckt mehr ab.
  • Gemischte Inhalte stehen lassen: Ändern Sie in den Templates und in den Inhalten der Datenbank Ihre eigenen Adressen, die mit http:// beginnen, auf https://.
  • Die Cookies vergessen: Geben Sie dem Sitzungs-Cookie nach der Umstellung auf HTTPS das Flag Secure. Siehe Login- und Sitzungssicherheit.

Checkliste

  • HTTP-Anfragen werden per 301 auf HTTPS umgeleitet; es gibt keine Weiterleitungsschleife.
  • Das Zertifikat ist gültig und wird automatisch erneuert.
  • Es gibt keine Warnungen zu gemischten Inhalten.
  • HSTS wurde mit kurzer Laufzeit getestet und danach verlängert.
  • X-Content-Type-Options: nosniff ist gesetzt.
  • Das Einbetten in Frames ist mit X-Frame-Options und frame-ancestors eingeschränkt.
  • Referrer-Policy und Permissions-Policy sind gesetzt.
  • Die CSP läuft mindestens im Report-Only-Modus; die Verstöße werden ausgewertet.
  • Die Header werden auch auf Unterseiten und Fehlerseiten gesendet.

Häufige Fragen

Machen die Header meine Website langsamer?

Nein. Header sind Text im Umfang von einigen Hundert Bytes; eine messbare Verlangsamung entsteht nicht. HSTS bringt sogar einen kleinen Geschwindigkeitsgewinn, weil bei späteren Besuchen der Weiterleitungsschritt entfällt.

Soll ich den Header X-XSS-Protection setzen?

Aktuelle Browser unterstützen diesen Header nicht mehr; in manchen Fällen konnte er sogar Probleme verursachen. Verwenden Sie stattdessen die Content-Security-Policy.

Ich kann keine .htaccess verwenden; was kann ich tun?

Bei Servern wie Nginx werden dieselben Header in der Serverkonfiguration mit add_header definiert. Beim Shared Hosting können Sie sie im Panel Ihres Anbieters oder mit Hilfe des Supports setzen; wenn Sie ein CDN nutzen, lassen sich die Header auch im CDN-Panel hinzufügen.

Wegen der CSP funktioniert eine Funktion nicht mehr; was soll ich tun?

Die Meldung zum Verstoß in der Browserkonsole zeigt, welche Quelle an welcher Direktive scheitert. Tragen Sie diese Quelle in die betreffende Direktive ein oder lagern Sie das Inline-Skript in eine eigene Datei aus. Deshalb ist es wichtig, zunächst im Report-Only-Modus zu beginnen.

BYK Yazılım Support-Team
Diese Anleitung wird vom Support-Team von BYK Yazılım erstellt und regelmäßig überprüft. Letzte Aktualisierung: 04.10.2026.

Verwandte Anleitungen

Sehen wir uns Ihre Website gemeinsam an

BYK Yazılım entwickelt Unternehmenswebsites. Schreiben Sie uns, wenn Sie Fragen zu Ihrer Website haben.

Kontakt aufnehmen Unsere Leistung: Unternehmenswebsite