Formularz logowania przez nieszyfrowane HTTP
Co to jest
Gdzieś w Twojej witrynie znajduje się formularz z polem type="password" i jego akcja (action=) wskazuje na nieszyfrowany http:// URL. Wprowadzone hasło wędruje przez sieć otwartym tekstem.
Pojawia się to zazwyczaj na:
- Starszych ekranach logowania (często administracja hostingu, intranet, archiwalne instalacje).
- Witryna ma HTTPS, ale w środku jest
<form action="http://...">z zakodowanym na stałe URL-em HTTP. - Subdomena (
old.example.pl,admin.example.pl) nie ma certyfikatu.
Dlaczego to problem
Gdy użytkownik wpisze hasło i naciśnie Enter, przeglądarka wyśle je otwartym tekstem. Każdy po drodze (niezaufane Wi-Fi, ISP, sąsiad na hostingu, skompromitowany router) odczyta hasło. Jeśli formularz znajduje się na innym hostname niż sama strona, przeglądarka wyświetli ostrzeżenie — ale użytkownik zazwyczaj kliknie „Kontynuuj”.
Chrome od wersji 86 pokazuje „Ten formularz nie jest bezpieczny” bezpośrednio pod polem. Konwersja spada, ludzie się nie rejestrują.
Jak to naprawić
Krok 1 — naprawić action=
Znajdź w HTML wszystkie tagi <form> i zmień action="http://..." na action="https://..." lub lepiej na ścieżkę względną (action="/login") — ta odziedziczy protokół strony.
Krok 2 — wymusić HTTPS w całej witrynie
Nawet jeśli naprawisz konkretny formularz, odwiedzający może do niego dotrzeć przez http://. Serwer musi przekierowywać — zobacz Witryna działa tylko na HTTP.
Krok 3 — HSTS
Po wdrożeniu HSTS przeglądarka w ogóle przestanie nawiązywać połączenia HTTP — nawet gdyby użytkownik wpisał http://example.pl. Szczegóły zobacz Strict-Transport-Security.
Krok 4 — subdomeny
Jeśli panel administracyjny lub legacy znajduje się na subdomenie, wystaw certyfikat również dla niej. Certyfikat wildcard od Let’s Encrypt (*.example.pl) rozwiązuje wszystko.
Weryfikacja
# w przeglądarce otworzyć DevTools → Network → wysłać formularz
# request URL musi zaczynać się od https://