BBC wdraża w swojej witrynie mechanizm HSTS, który zwiększy bezpieczeństwo i wydajność witryny. Dowiedz się, co to oznacza i jak HSTS może Ci pomóc.
W ostatnich latach coraz więcej osób korzysta z protokołu HTTPS. Według raportu Web Almanac z 2021 roku około 91% żądań zarówno z komputerów, jak i z urządzeń mobilnych zostało przesłanych przez HTTPS. Protokół HTTPS nie tylko przestanie działać. Jest on też niezbędnym wymogiem wstępnym do korzystania z takich funkcji jak Service Worker i nowoczesne protokoły, takie jak HTTP/2 i HTTP/3.
Niedawno Neil Craig – główny architekt techniczny BBC – opublikował tweeta, że w przypadku witryny bbc.com powoli wdrażany jest mechanizm HSTS (HTTP Strict Transport Security). Dowiedz się, co to oznacza dla BBC i co to oznacza dla Ciebie.
Problem
Serwery WWW często nasłuchują żądań na obu portach 80 i 443. Port 80 służy do obsługi niezabezpieczonych żądań HTTP, a 443 – dla bezpiecznego protokołu HTTPS. Może to być przyczyną problemu, ponieważ gdy wpiszesz adres na pasku adresu bez prefiksu protokołu https://
(jak robi to większość użytkowników), niektóre przeglądarki ze starszych powodów przekierowują ruch do niezabezpieczonej wersji HTTP witryny (chociaż nie zawsze tak jest).
Typowym sposobem na zablokowanie dostępu użytkowników do niezabezpieczonej wersji witryny jest ustawienie dla wszystkich żądań przekierowania HTTP na HTTPS. To z pewnością działa, ale wywołuje następujący łańcuch zdarzeń:
- Serwer odbiera żądanie HTTP.
- Serwer wykonuje przekierowanie, aby przejść do odpowiednika HTTPS żądanego zasobu.
- Serwer musi wynegocjować bezpieczne połączenie z przeglądarką.
- Zawartość wczytuje się w zwykły sposób.
Mimo że przekierowania działają prawidłowo, mogą one być nieprawidłowo skonfigurowane, a przez to umożliwiać dostęp do niezabezpieczonej wersji witryny. Nawet jeśli wszystko jest prawidłowo skonfigurowane, nadal występuje problem z bezpieczeństwem, który polega na tym, że w trakcie fazy przekierowania użytkownik wciąż łączy się z użyciem niezabezpieczonego HTTP HTTP, co naraża użytkowników na ryzyko niebezpiecznych ataków typu „man in the middle”.
Wpisz HSTS
Działanie mechanizmu HSTS jest zależne od nagłówka odpowiedzi HTTP Strict-Transport-Security
dla żądań HTTPS. Gdy ta opcja jest skonfigurowana, ponowne wizyty w witrynie będą powodowały specjalne przekierowanie nazywane „wewnętrznym przekierowaniem 307”. Sygnalizuje ono, że logika przekierowania obsługuje przeglądarka, a nie serwer. Zapobiega to przechwyceniu żądania, ponieważ nigdy nie opuszcza przeglądarki, więc jest bezpieczniejsze. Dodatkową zaletą tego typu przekierowań są niezwykle szybkie przekierowania, dzięki czemu eliminowane są wszelkie zauważalne opóźnienia podczas przeskoków HTTP do HTTPS.
![Wewnętrzne przekierowanie 307 z HTTP do HTTPS, uruchamiane przez nagłówek HSTS. Przekierowanie 307 trwa tylko 2 milisekundy.](https://web.dev/static/blog/bbc-hsts/image/a-307-internal-redirect-cd7d384b0a833.png?authuser=7&hl=pl)
Podobnie jak w składni dyrektywy max-age
w języku Cache-Control
, nagłówek HSTS zawiera dyrektywę max-age
. Ta dyrektywa pobiera wartość w sekundach, która określa, przez jaki czas zasada jest stosowana:
Strict-Transport-Security: max-age=3600
W poprzednim przykładzie zasada powinna być stosowana tylko przez godzinę.
Wdrażanie HSTS
Główną wadą wdrażania HSTS jest to, że nie chcesz jeszcze dbać o bezpieczeństwo swojego źródła. Załóżmy, że masz wiele subdomen, z których udostępniasz zasoby, ale nie wszystkie z nich są bezpieczne. W takim przypadku nagłówek HSTS może uszkodzić witrynę.
BBC przyjęło właściwe podejście do wdrożenia mechanizmu HSTS. Jak wspomniał Neil Craig w swoim tweetie, początkowa wartość ustawiona dla adresu bbc.com to max-age=10
.
Oznacza to, że zasada była początkowo stosowana tylko przez 10 sekund. Nie daje to zbyt wielu korzyści, warto jednak zastanowić się, czy nie pojawią się problemy ze stosowaniem HSTS. Z czasem możesz stopniowo zwiększać zakres zasad i sprawdzać, czy wystąpią problemy. W tym momencie na stronie bbc.com była określona zasada HSTS wynosząca max-age=86400
. Stopień ten na pewno będzie się zmieniał w miarę upływu czasu.
Wdrożenie HSTS wymaga od nas bardzo ważnej wartości max-age
. Może się zdarzyć, że nagle zaczniesz rozwiązywać problemy, a użytkownicy napotykają te problemy. Zacznij od czegoś małego i z czasem stopniowo się zwiększaj. Jeśli masz pewność, że wszystko jest w porządku, możesz ustawić znacznie dłuższy okres w dyrektywie max-age
. Zalecamy ustawienie opcji max-age
na rok lub 2 lata po pełnym wdrożeniu.
Bezpieczniejsza i szybsza wstępna nawigacja dzięki liście wstępnego wczytywania HSTS
Zasady HSTS zaczynają obowiązywać dopiero po pierwszej wizycie w witrynie, więc korzyści nie będą widoczne przy pierwszej wizycie. Nadal będzie wymagać niezabezpieczonego przekierowania. Możesz jednak wstępnie wczytać zasadę HSTS, przesyłając swoją witrynę na listę wstępnego wczytywania HSTS, czyli zakodowaną na stałe listę witryn, które przeglądarka wie, że korzystają wyłącznie z protokołu HTTPS. Gdy Twoja witryna znajduje się na liście wstępnego wczytywania, chroniona jest też pierwsza wizyta, a przekierowanie HTTP-HTTPS jest natychmiastowe.
Wypróbuj
Jeśli BBC chce przetestować mechanizm HSTS, być może uda Ci się to zrobić również w przypadku Twojej witryny. Wypróbuj tę funkcję, a jeśli chcesz ją poprawić, dodaj ją do listy wstępnego ładowania HSTS, gdy będziesz mieć pewność, że nie ma w nich żadnych błędów, dzięki którym użytkownicy będą mogli korzystać z i szybciej.