Składnia i dyrektywy
- max-age: czas obowiązywania w sekundach, odświeżany po każdej poprawnej odpowiedzi HTTPS zawierającej nagłówek.
- includeSubDomains: rozszerza ochronę na wszystkie subdomeny.
- preload: sygnalizuje zgodę na zgłoszenie; samo słowo w nagłówku nie wpisuje domeny na listę przeglądarek.
Uwagi wdrożeniowe
Nagłówek działa tylko wysłany po HTTPS. Wdrażaj stopniowo: najpierw krótki max-age, potem wydłużenie i includeSubDomains, a preload dopiero po upewnieniu się, że wszystkie subdomeny (także techniczne) obsługują HTTPS, bo usunięcie z listy preload trwa miesiącami.
Przykład
Polityka na rok z ochroną subdomen. Typowy krok przed rozważeniem wpisu na listę preload.
Strict-Transport-Security: max-age=31536000; includeSubDomainsZacznij od krótkiego czasu i sprawdź HTTPS oraz subdomeny przed wydłużeniem. Politykę można wyłączyć nagłówkiem max-age=0 dostarczonym przez poprawne HTTPS, lecz nie cofa to preload ani polityki nadrzędnej domeny. Bez działającego HTTPS dostarczenie zmiany może być niemożliwe.
Wbudowaną w przeglądarki listą domen, które są traktowane jako HTTPS-only jeszcze przed pierwszą wizytą. Zgłoszenie na hstspreload.org wymaga nagłówka z max-age co najmniej roku, dyrektywą includeSubDomains i słowem preload.
Da się, ale powoli: usunięcie wymaga zgłoszenia i rozejścia się z nową wersją przeglądarki, co trwa miesiącami. Dlatego preload warto włączać dopiero wtedy, gdy każda subdomena, także wewnętrzna i testowa, na pewno obsługuje HTTPS.
Bo przeglądarki ignorują Strict-Transport-Security odebrany przez połączenie nieszyfrowane. Nagłówek ma sens tylko w odpowiedzi wysłanej po HTTPS, bo inaczej atakujący mógłby go dowolnie podmienić.
Źródła i dalsza lektura
- MDN: Strict-Transport-Security dokumentacja
- RFC 6797: HTTP Strict Transport Security standard
- hstspreload.org: lista preload Chromium dokumentacja