WordPress: Mixed Content Warnungen loswerden

Ich habe heute mal wieder ein paar Wartungsarbeiten an meinem Blog vorgenommen. Der Blog ist schon seit es Let’s Encrypt Zertifikate bei meinem Hoster (netcup) gibt, per HTTPS erreichbar, allerdings ehrlich gesagt ein bisschen lieblos gemacht. Jetzt ist es besser 🙂

Was war das Problem? Eine Website besteht nicht nur aus einem (HTML-)Dokument, sondern bettet eigentlich immer noch weitere Ressourcen ein, also Bilder, JavaScript, CSS etc. Die URL, unter der diese Ressourcen zu finden sind, steht in der ursprĂŒnglich ausgelieferten HTML-Datei. Es kann nun aber vorkommen, dass hier auf eine Ressource verwiesen wird, die nicht per HTTPS angesprochen wird. Und schon hat man eine unschöne Mixed-Content-Warnung am Hals 🙁

Die Idee dahinter ist richtig: Wenn ich eine sichere (=HTTPS) Seite besuche, diese dann aber z.B. ein JavaScript unsicher (=per HTTP) nachlÀdt, kann ein Angreifer dieses JavaScript weiterhin manipulieren, und damit immer noch eine Menge Unsinn anstellen. Alle Browser sind daher so eingestellt, dass aktiver Mixed-Content, also alles in Richtung Scripte, nicht erlaubt ist, und nicht geladen wird. Passiver Mixed-Content, also vor allem Bilder sind erlaubt, erzeugen aber eine Warnung.

Wo liegt nun also das Problem? Alle externen Ressourcen, die meine Seite einbindet (das sind im Wesentlichen Schriften von Google Fonts), wurden per HTTPS ausgeliefert, verursachen also kein Problem. Das Problem waren in Posts eingebettete Bilder. WordPress fĂŒgt Bilder im Editor immer mit einem absoluten Link ein, und dieser Link bezieht sich auf die aktuelle URL der Seite bei der Erstellung des Posts! Das sieht dann z.B. so aus:

<img class="aligncenter size-full wp-image-1434" title="posts" src="http://niklas-rother.de/wp-content/uploads/2011/08/posts.png" alt="" width="475" height="283">

Das Problem betrifft also alle Posts, die vor der Umstellung auf HTTPS erstellt wurden. Leider lĂ€sst es sich auch nicht so einfach lösen, denn dafĂŒr mĂŒsste man alle alten Posts bearbeiten, und dort die Links anpassen. Alternativ hĂ€tte man sich vorher mal beschweren sollen, dass WordPress vielleicht lieber relative URLs fĂŒr die Bilder hĂ€tte verwenden sollen 😉

Ich hatte das Problem damals recht einfach mit der Holzhammer Methode gelöst: Das Plugin „SSL Insecure Content Fixer“ tut, was der Name verspricht: Es löst auf magische Art und Weise alle Mixed-Content-Probleme 😛 Was das Plugin tatsĂ€chlich macht, ist recht einfach: Es fĂ€ngt die Ausgabe der Posts ab, und repariert alle Links per Suchen&Ersetzen bevor sie an den Browser geschickt werden. Ein einfache und effektive Lösung, aber nicht besonders elegant, und auch nicht gerade förderlich fĂŒr die Performance, das die Ersetzung jedes mal auf neue durchgefĂŒhrt wird.

Ich habe das Problem daher heute endgĂŒltig gelöst, und die Links direkt in der Datenbank repariert. DafĂŒr gibt es auch wieder ein Plugin: Better Search Replace. Dieses Plugin fĂŒhrt einfach eine Textersetzung in der Datenbank aus. Vorher ein Backup machen!

Ich habe diese Einstellungen verwendet:

Einstellungen von Better Serach Replace

Es wird also die alte HTTP-URL durch die neue HTTPS-Variante ersetzt, und das in allen Tabellen außer den Kommentaren (die Tabelle ist sehr groß, und da sollte nicht drin sein). Das Wesentlich ist die Tabelle „wp_posts“, dort ist der HTML-Code der eigentlichen BeitrĂ€ge drin gespeichert. Das Ergebnis sah dann so aus:

Ergebnis der Ersetzung

Wie zu erwarten war, wurde vor allem in wp_posts erwas setzt. In wp_postmeta (Metadaten zu den Posts) und wp_options (Einstellungen des Blogs) waren vor allem irgendwelche Caches von alten Plugins, die aber vermutlich auch kein Problem gemacht hÀtten.

Damit sind die Mixed-Content-Warnungen jetzt Gechichte, und der SSL-Check (sehr nĂŒtzlich!) gibt grĂŒnes Licht. Außerdem habe ich gleich noch mal PHP auf 7.2 (warum nicht 7.4, nectup?) aktualisiert, WordPress geupdated und 32k Spam-Kommentare gelöscht. Außerdem wird die Website jetzt von nginx statt Apache ausgeliefert. Damit ist der Blog wieder frisch fĂŒr 2020. Jetzt brauch ich nur noch Inhalte…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.