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-agejest 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-ageokreś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
includeSubDomainsspowoduje 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
preloadi 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-agei dodaj tylkoincludeSubDomains(bezpreload):max-age=3600; includeSubDomainsPo upływie okresu oczekiwania (np. tygodnia) bez zgłoszonych problemów możesz podnieść wartość parametru
max-age, na przykład:max-age=604800; includeSubDomainsJeś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