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:

Dlaczego to problem

Gdy użytkownik wpisze hasło i naciśnie Enter, przeglądarka wyśle je otwartym tekstem. Każdy po drodze (nie­za­ufane 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://

Materiały źródłowe