Protokoły w postaci zwykłego tekstu, takie jak HTTP, mogą być podatne na ataki polegające na podsłuchiwaniu, w których trakcie atakujący może odczytać przesyłane treści. Na szczęście protokół Transport Layer Security (TLS) może szyfrować ruch, co znacznie utrudnia atakującym wykorzystanie przechwycionych danych.
Jednak atakujący mogą obejść TLS, wymuszając szyfrowane połączenia z wykorzystaniem zwykłego HTTP. Aby rozwiązać ten problem, wprowadziliśmy nagłówek odpowiedzi HTTP Strict Transport Security (HSTS), który wymusza na przeglądarce użytkownika korzystanie z protokołu TLS podczas odwiedzania witryny i nie powoduje przejścia na niezabezpieczony protokół HTTP (przez określony czas).
Dlaczego audyt Lighthouse się nie udaje
Podczas audytu zostaną zgłoszone te problemy z nagłówkiem HSTS:
- Jeśli nie znaleziono nagłówka HSTS.
- Brak jednej z zalecanych dyrektyw (
max-age
,includedSubDomains
,preload
) - Jeśli czas trwania dyrektywy
max-age
jest krótszy niż rok (31536000 sekund). - Jeśli podczas analizowania nagłówka wystąpi błąd składni, np. nieznana dyrektywa.
Konfigurowanie silnej zasady HSTS
Optymalna konfiguracja nagłówka HSTS wygląda tak:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- Dyrektywa
max-age
określa czas, przez jaki przeglądarka użytkownika jest zmuszona do odwiedzania witryny tylko przy użyciu protokołu TLS (w sekundach). Po tym czasie będzie można ponownie uzyskać dostęp do witryny za pomocą zwykłego protokołu HTTP, jeśli witryna nie udostępni nagłówka HSTS (lub jeśli nie ma tymczasowych przekierowań z HTTP na HTTPS). - Ustawienie dyrektywy
includeSubDomains
spowoduje wymuszenie nagłówka na wszystkich subdomenach adresu URL strony, która wysyła nagłówek. Na przykład nagłówek HSTS wysłany przez google.com, który zawiera dyrektywęincludeSubDomains
, będzie również egzekwowany w nagłówku HSTS na stronie mail.google.com. - Ustawienie dyrektywy
preload
i przesłanie domeny do usługi wstępnego ładowania HSTS skompiluje domenę w pliki binarne przeglądarki, które korzystają z wstępnie wczytanej listy HSTS (a nie tylko z Google Chrome).
Wdrażanie nagłówka HSTS wiąże się z pewnymi zagrożeniami. Wszystkie funkcje wymagające niezaszyfrowanego połączenia HTTP będą nieaktywne przez czas określony w dyrektywie max-age
. Może to potrwać jeszcze dłużej, jeśli zostanie zastosowana dyrektywa preload
.
Aby zmniejszyć ryzyko związane z wdrażaniem, zalecamy etapowe podejście:
Zacznij od małego
max-age
i dodaj tylkoincludeSubDomains
(bezpreload
):max-age=3600; includeSubDomains
Po upływie okresu oczekiwania (np. tygodnia) bez zgłoszonych problemów możesz podnieść wartość parametru
max-age
, na przykład:max-age=604800; includeSubDomains
Jeśli ta początkowa faza przebiega pomyślnie przez dłuższy czas (np. 3 miesiące), witrynę i jej subdomeny należy dodać do listy wstępnego wczytania HSTS oraz dodać dyrektywę
preload
.max-age=63072000; includeSubDomains; preload