Brak Strict-Transport-Security
Co to jest
Twoja strona nie wysyła nagłówka Strict-Transport-Security (HSTS). Ten nagłówek mówi przeglądarce „na tej witrynie nigdy więcej nie używaj HTTP, zawsze od razu HTTPS”.
Dlaczego to problem
Nawet jeśli masz działające HTTPS oraz przekierowanie z HTTP, pierwsza wizyta ma słaby punkt. Użytkownik wpisuje example.pl — przeglądarka zaczyna od próby HTTP. Jeśli w tym momencie między tobą a serwerem znajduje się atakujący (publiczne Wi-Fi, skompromitowany router), może on:
- Przechwycić cookies, które przeglądarka wyśle wraz z żądaniem HTTP.
- Przeprowadzić SSL strip — utrzymać użytkownika na HTTP, a samemu komunikować się z serwerem przez HTTPS.
Z HSTS przeglądarka wie z góry, że na example.pl nie wolno wejść przez HTTP, i atak się nie udaje.
Jak to naprawić
Krok 1 — upewnij się, że HTTPS jest stabilne
HSTS przeglądarka „zapamiętuje” na dłuższy okres. Jeśli potem zepsujesz HTTPS (wygasły certyfikat, przypadkowo wyłączone SSL), twoja witryna będzie dla powracających odwiedzających niedostępna — przeglądarka odmówi nawet awaryjnego powrotu do HTTP.
Przed włączeniem HSTS sprawdź:
- Automatyczne odnawianie certyfikatu działa (Let’s Encrypt, certbot, alerty).
- Wszystkie subdomeny, które chcesz objąć, mają ważny certyfikat.
Krok 2 — ustaw krótką wartość do testu
Strict-Transport-Security: max-age=3005 minut. Jeśli coś się zepsuje, w ciągu 5 minut wygaśnie. Monitoruj uptime i uruchom kilka testów.
Krok 3 — wdróż wartość produkcyjną
Strict-Transport-Security: max-age=15552000; includeSubDomainsmax-age=15552000= 6 miesięcy.includeSubDomains= obowiązuje także na wszystkich subdomenach. Uwaga: jeśli masz subdomenę bez HTTPS (legacy admin, intranet), ta dyrektywa ją zepsuje.
Krok 4 (opcjonalny) — preload
Jeśli chcesz znaleźć się na wbudowanej liście przeglądarek (Chrome, Firefox, Safari) i mieć HSTS już przy pierwszej w ogóle wizycie z czystej przeglądarki:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preloadNastępnie zarejestruj domenę na hstspreload.org.Ten krok jest trudny do cofnięcia — usunięcie z listy trwa tygodnie, a nawet miesiące.
Konkretne konfiguracje
nginx:
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;Apache:
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"Cloudflare: SSL/TLS → Edge Certificates → HTTP Strict Transport Security — checkbox w UI.