Anmeldeformular über unverschlüsseltes HTTP
Worum es geht
Irgendwo auf Ihrer Website gibt es ein Formular mit einem Feld type="password" und dessen Aktion (action=) zeigt auf eine unverschlüsselte http:// URL. Das eingegebene Passwort wird offen über das Netz übertragen.
Das tritt typischerweise auf bei:
- Älteren Anmeldebildschirmen (oft Hosting-Administration, Intranet, Archiv-Installationen).
- Die Website hat HTTPS, aber im Inneren steckt ein
<form action="http://...">mit hartcodierter HTTP-URL. - Eine Subdomain (
old.example.cz,admin.example.cz) hat kein Zertifikat.
Warum das ein Problem ist
Wenn der Nutzer ein Passwort eingibt und Enter drückt, sendet der Browser es im Klartext. Jeder dazwischen (ein nicht vertrauenswürdiges WLAN, der ISP, ein Hosting-Nachbar, ein kompromittierter Router) kann das Passwort mitlesen. Wenn das Formular auf einem anderen Hostnamen liegt als die Seite selbst, warnt der Browser zwar — aber der Nutzer klickt typischerweise auf „Fortfahren“.
Chrome zeigt seit Version 86 „Dieses Formular ist nicht sicher“ direkt unter dem Eingabefeld. Die Konversion bricht ein, die Leute registrieren sich nicht.
Wie man es behebt
Schritt 1 — action= korrigieren
Suchen Sie im HTML alle <form>-Tags und ändern Sie action="http://..." zu action="https://..." oder besser zu einem relativen Pfad (action="/login") — dieser erbt das Protokoll der Seite.
Schritt 2 — HTTPS auf der gesamten Website erzwingen
Selbst wenn Sie das konkrete Formular korrigieren, kann ein Besucher es über http:// erreichen. Der Server muss umleiten — siehe Website läuft nur über HTTP.
Schritt 3 — HSTS
Nach dem Aktivieren von HSTS baut der Browser überhaupt keine HTTP-Verbindung mehr auf — selbst wenn der Nutzer http://example.cz eintippt. Details siehe Strict-Transport-Security.
Schritt 4 — Subdomains
Wenn Admin oder Legacy auf einer Subdomain liegen, statten Sie auch diese mit einem Zertifikat aus. Ein Wildcard-Zertifikat von Let’s Encrypt (*.example.cz) löst alles.
Überprüfung
# im Browser DevTools öffnen → Network → Formular absenden
# die Request-URL muss mit https:// beginnen