Stosowanie silnej zasady HSTS

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

Ostrzeżenie z audytu Lighthouse, że nie znaleziono nagłówka odpowiedzi HSTS.
Ostrzeżenie w raporcie Lighthouse, że nie znaleziono nagłówka odpowiedzi HSTS.

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:

  1. Zacznij od małego max-age i dodaj tylko includeSubDomains (bez preload):

    max-age=3600; includeSubDomains
    
  2. 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
    
  3. 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