Was ist Mixed Content?
Mixed Content heißt, dass eine verschlüsselt aufgerufene Seite einzelne Bestandteile wie Bilder oder Skripte unverschlüsselt nachlädt.
Ohne Fachbegriffe, für Betriebe ohne eigene IT.
Auf dieser Seite4 Abschnitte
Einfach erklärt
Mixed Content heißt „gemischte Inhalte“: Die Seite selbst kommt verschlüsselt über „https://“, lädt aber einzelne Bestandteile unverschlüsselt über „http://“ nach, etwa ein Bild, eine Schrift oder ein Skript. Das ist, als würden Sie einen versiegelten Brief verschicken und eine Seite davon als offene Postkarte hinterherschicken. Wer mitliest, sieht diesen Teil. Wer eingreift, kann ihn austauschen und so etwa ein manipuliertes Skript in Ihre Seite bringen.
Woran Sie es merken
Browser, die dem aktuellen Standard folgen, lassen das nicht durchgehen. Skripte, Stylesheets und eingebettete Seiten aus unverschlüsselten Quellen blockieren sie. Bilder, Videos und Töne versuchen sie verschlüsselt zu laden und blockieren sie, wenn das nicht klappt. Für Besucher sieht die Seite dann kaputt aus: Bilder fehlen, Schriften stimmen nicht, eine Karte oder ein Formular funktioniert nicht.
Wie es entsteht
Eine Ursache sind alte Adressen. Die Website lief früher ohne Verschlüsselung. In Texten, Vorlagen oder Einstellungen stehen noch Verweise mit „http://“. Eine andere Ursache sind fremde Dienste, die keine Verschlüsselung anbieten.
Was Sie tun können
Die Firma, die Ihre Website betreut, stellt die betroffenen Adressen auf „https://“ um. Im CMS können sie in alten Beiträgen und Einstellungen stecken, dafür gibt es Werkzeuge zum Suchen und Ersetzen. Lässt sich ein fremder Inhalt nicht verschlüsselt laden, sollte er ersetzt oder entfernt werden.
Gut zu wissen: In seinen Grundschutz-Anforderungen an Webserver schließt das BSI Mixed Content ausdrücklich aus. Wer HTTPS nutzt, soll alle Inhalte über HTTPS ausliefern.
Kategorien nach W3C
Die W3C-Spezifikation Mixed Content (Candidate Recommendation Draft, Stand Februar 2023) unterscheidet zwei Arten:
- Upgradeable (früher „optionally-blockable“): Bilder, Audio und Video über
<img>,<audio>,<video>und CSS-Bilder. Der Browser schreibthttpaufhttpsum und blockiert den Inhalt, wenn der Abruf scheitert. Ausgenommen sind<img>mitsrcsetoder in<picture>sowie CORS-Anfragen, sie werden blockiert. - Blockable: alles andere, etwa Skripte, Stylesheets, Schriften,
<iframe>,fetchund XHR.
Gemischte Downloads sollen Browser laut Spezifikation ebenfalls blockieren. Das BSI verlangt im Baustein APP.3.2 Webserver (A11): Wenn eine HTTPS-Verbindung genutzt wird, müssen alle Inhalte über HTTPS ausgeliefert werden.
Übergangshilfe
Content-Security-Policy: upgrade-insecure-requests
Die Anweisung aus der W3C-Spezifikation Upgrade Insecure Requests lässt den Browser http://-Verweise der Seite vor dem Abruf auf https:// umschreiben, auch bei Skripten. Antwortet die Gegenstelle nicht per HTTPS, schlägt der Abruf fehl. Dauerhaft gehören die Adressen im Quelltext und in der Datenbank korrigiert.
HSTS hilft dabei nur begrenzt. Der Browser schreibt http:// lediglich für Hosts um, deren HSTS-Regel er kennt. Verweise auf andere fremde Hosts bleiben Mixed Content.
Bei WordPress liegen alte Adressen etwa in den Optionen siteurl und home und in Beitragsinhalten. WP-CLI zeigt vorab, was sich ändern würde:
wp search-replace 'http://ihre-firma.de' 'https://ihre-firma.de' --dry-run
Typische Fehler
- Fest eingetragene
http://-Adressen in Theme, Plugin-Einstellungen oder Seitenbaukästen. - Absolute Adressen in CSS, etwa
background: url(http://…). - Eingebettete Fremdinhalte ohne HTTPS, etwa alte Kartendienste oder Besucherzähler.
- Formular mit
action="http://…"auf einer HTTPS-Seite. Die Eingaben gehen unverschlüsselt hinaus.
Prüfen
curl -s https://ihre-firma.de/ | grep -o -E '(src|action)="http://[^"]+"' | sort -u
curl -s https://ihre-firma.de/ | grep -o -E '<link[^>]+href="http://[^"]+"' | sort -u
Das findet Verweise im HTML. Was Skripte und Stylesheets nachladen, zeigt nur der Browser: In den Entwicklerwerkzeugen (F12) meldet die Konsole jeden Mixed-Content-Fall.