Strict Transport Security

Wstępne przekierowanie ruchu

W artykule Nagłówki bezpieczeństwa strony internetowej pokrótce opisałem nagłówek Strict Transport Security. Tak jak wspomniałem, konfiguracja tego nagłówka wymaga wcześniejszego zainstalowania certyfikatu SSL. Nawet jeśli masz zainstalowany certyfikat SSL w swojej domenie, każdy może nadal korzystać z Twojej witryny przez http. Może to być wykorzystane przez inną witrynę, która podszywa się pod Twoją. Wygląda to mniej więcej tak, że użytkownik wpisuje adres domena.com, ale złośliwe oprogramowanie kieruje żądanie do witryny podszywającej się pod ten adres. W tym momencie użytkownik jest narażony na ataki. Aby temu zapobiec, najprostszym rozwiązaniem jest dodanie przekierowania, które wymusza korzystanie z SSL. Następnie należy ustawić przekierowanie z przeglądania stron z HTTP na HTTPS. W tym celu w pliku .htaccess umieszczamy odpowiednie polecenia:

RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Dyrektywy nagłówka Strict Transport Security

Nagłówek HTTP Strict Transport Security wykorzystuje 3 dyrektywy, które poniżej krótko przedstawię:

  • max-age
  • includeSubDomains
  • preload

Dyrektywa max-age jest obowiązkowa i może mieć dowolną wartość od 0 wzwyż. Wskazuje ona liczbę sekund po otrzymaniu polityki. Ja proponuję ustawić wartość 31536000, co jest równe 365 dniom. Wartość dyrektywy max-age wynosząca 0 informuje o zaprzestaniu traktowania hosta, który go wystawił jako hosta HSTS i usunięciu wszystkich zasad. Nie implikuje nieskończonej wartości dyrektywy max-age.
Dyrektywa includeSubDomains, jest funkcją opcjonalną, którą można dołączyć według uznania. Gdy ją ustawimy, to wszystkie subdomeny będą traktowane jako hosty HTTP Strict Transport Security.
Dyrektywę preload przedstawiam w dalszej części tekstu.

Konfiguracja nagłówka Strict Transport Security

HTTP Strict Transport Security (HSTS) informuje przeglądarkę, że zawsze chcesz, aby użytkownik łączył się za pomocą HTTPS zamiast HTTP. Oznacza to, że wszelkie zakładki, linki lub adresy, które użytkownik wpisuje, będą zmuszone do korzystania z HTTPS, nawet jeśli użytkownik wpisze HTTP. Po ustawieniu HSTS komunikacja przeglądarki z serwerem odbywa się wyłącznie przez bezpieczne połączenie. Wstawiamy więc kod:

Header always set Strict-Transport-Security max-age=31536000; includeSubDomains

Jeśli ustawisz ten nagłówek w swojej domenie, przeglądarka od tej pory będzie wykonywać wszystkie żądania przez https. Tak więc w przypadku, gdy haker przekierowuje użytkownika do fałszywej domeny.com, przeglądarka pamięta o użyciu SSL z powodu HSTS. Żąda połączenia z bezpieczną witryną. W efekcie nie połączy użytkownika z fałszywą domeną, gdyż żaden certyfikat SSL nie będzie autoryzował fałszywej witryny.

Ponieważ przeglądarka musi najpierw odwiedzić Twoją witrynę, aby zobaczyć ten nagłówek, będzie on aktywny dopiero po pierwszej wizycie. Jest to pewnego rodzaju luka w zabezpieczeniach. Jeśli użytkownik odwiedza Twoją witrynę po raz pierwszy, to HSTS nie zostanie ustawiony. Tak więc odwiedzający nadal może zażądać witryny przez http. Rozwiązaniem tego problemu jest dopisanie dyrektywy preload. Kod będzie wtedy wyglądał tak:

Header always set Strict-Transport-Security max-age=31536000; includeSubDomains; preload

Lista preload HSTS jest to lista domen HSTS, które wstępnie ładują się w przeglądarkach.

Jeśli umieścisz swoją witrynę na tej liście, to przeglądarka będzie wiedziała, że powinna ładować Twoją witrynę tylko przez https. Dzieje się tak nawet zanim zażąda ona pierwszego połączenia z Twoją witryną. Ale trzeba rozważnie stosować tę funkcję, gdyż wszystkie subdomeny (takie jak sub.domain.com) będą również wymuszone przez https. A jeśli po jakimś czasie uznasz, żeby usunąć swoją witrynę z listy preload, to musisz wiedzieć, że jest to bardzo trudne i może nie rozprzestrzeniać się zbyt szybko. Więc nawet jeśli usuniesz swoją witrynę z tej listy, przeglądarki mogą mieć ją na liście jeszcze przez kilka miesięcy.

Strict Transport Security – podsumowanie

Mam świadomość, że przedstawiam kolejny artykuł, który jest bardziej techniczny. Ale zgodnie z mottem mojej witryny „WordPress dla laików„, staram się w przystępny sposób przedstawić funkcjonalność kolejnego nagłówka bezpieczeństwa.

Jeśli wcześniej ustawiliśmy nagłówek Permissions Policy, przystępujemy do konfiguracji obecnego. Efekty widzimy na stronie https://securityheaders.com/ i kolejny z obszarów zaświeci się na zielono.

Strict Transport Security
Konfiguracja Strict Transport Security na stronie testowej

Jest to kolejny z elementów mających na celu poprawę bezpieczeństwa naszej witryny. Jest to też kolejny z kroków do uzyskania końcowego efektu, jaki opisałem w artykule Strona internetowa – jak ją założyć?

Jak już wspominałem we wcześniejszym artykule, witryny, które wykorzystują HSTS, Google dodaje do listy najlepszych domen internetowych. W efekcie są wyżej pozycjonowane. Jest to więc jeden z kroków do optymalizacji SEO naszej witryny.

Jeżeli potrzebujesz więcej informacji na temat nagłówka Strict Transport Security, znajdziesz je na tej stronie.