Czym jest HSTS?
HSTS (HTTP Strict Transport Security) to mechanizm bezpieczeństwa internetowego, który informuje przeglądarki, aby łączyły się z witryną wyłącznie przez HTTPS, nigdy przez HTTP. Gdy przeglądarka zobaczy nagłówek HSTS, automatycznie zmieni wszystkie przyszłe żądania na HTTPS i odmówi połączenia przez zwykły HTTP, nawet jeśli użytkownik wpisze jawnie http://.
Dlaczego HSTS ma znaczenie
Luki w zabezpieczeniach mogą występować nawet przy ważnym certyfikacie SSL:
Atak SSL stripping
1. Użytkownik wpisuje „example.com” (bez https://)
2. Atakujący przechwytuje początkowe żądanie HTTP
3. Atakujący przekazuje żądanie do HTTPS, a użytkownikowi prezentuje HTTP
4. Użytkownik sądzi, że jest bezpieczny, lecz atakujący widzi wszystko
HSTS zapobiega temu, gwarantując, że przeglądarki nigdy nie wyślą tego początkowego żądania HTTP.
Korzyści z HSTS
- Zapobiega atakom obniżenia poziomu zabezpieczeń: nie ma możliwości powrotu do HTTP
- Chroni zakładki użytkowników: nawet stare zakładki HTTP stają się adresami HTTPS
- Eliminuje mieszaną zawartość: zasoby podrzędne również są wymuszane na HTTPS
- Poprawia wydajność: nie są potrzebne przekierowania z HTTP do HTTPS
Składnia nagłówka HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Dyrektywy
| Dyrektywa | Opis |
|---|---|
| max-age | Liczba sekund zapamiętywania HSTS (31536000 = 1 rok) |
| includeSubDomains | Zastosowanie HSTS do wszystkich subdomen |
| preload | Zgoda na umieszczenie na liście wstępnego ładowania przeglądarek |
Wdrażanie HSTS
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Cloudflare
Włącz w SSL/TLS → Edge Certificates → HTTP Strict Transport Security
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
Lista preload HSTS
Lista preload HSTS to lista domen wpisanych na stałe do przeglądarek, do których należy łączyć się wyłącznie przez HTTPS. Eliminuje to nawet podatność związaną z pierwszym żądaniem HTTP.
Wymagania preload
1. Ważny certyfikat SSL
2. Przekierowanie całego HTTP do HTTPS
3. Nagłówek HSTS zawierający:
- max-age o wartości co najmniej 31536000 (1 rok)
- dyrektywę includeSubDomains
- dyrektywę preload
4. Wszystkie subdomeny muszą obsługiwać HTTPS
Zgłoszenie na listę preload
1. Sprawdź wymagania: użyj hstspreload.org
2. Zgłoś domenę: wpisz domenę na hstspreload.org
3. Poczekaj na uwzględnienie: aktualizacje przeglądarek mogą potrwać od kilku tygodni do kilku miesięcy
Ostrzeżenia dotyczące preload
Preload jest praktycznie trwały. Usunięcie domeny z listy trwa miesiącami i wymaga aktualizacji przeglądarek. Włączaj preload tylko wtedy, gdy masz pewność, że wszystkie subdomeny będą bezterminowo obsługiwać HTTPS.Sprawdzanie HSTS
Narzędzia deweloperskie przeglądarki:1. Otwórz narzędzia deweloperskie → kartę Network
2. Załaduj witrynę
3. Sprawdź nagłówki odpowiedzi pod kątem Strict-Transport-Security
Za pomocą curl:curl -I https://example.com | grep -i strict
Za pomocą DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports hasHSTS in security details
Stan preload:
Sprawdź hstspreload.org, aby dowiedzieć się, czy domena jest na liście preload.
Strategia wdrażania HSTS
Faza 1: Krótki max-age
Zacznij od krótkiego max-age, aby przeprowadzić test:
Strict-Transport-Security: max-age=300
Jeśli coś przestanie działać, użytkownicy będą mieli tę wartość zapisaną w pamięci podręcznej tylko przez 5 minut.
Faza 2: Wydłużenie czasu
Po potwierdzeniu, że HTTPS działa wszędzie:
Strict-Transport-Security: max-age=86400
Faza 3: Dodanie subdomen
Gdy wszystkie subdomeny obsługują HTTPS:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Faza 4: Pełne wdrożenie i preload
Po kilku miesiącach stabilnego działania:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Następnie zgłoś domenę na listę preload.
Typowe problemy z HSTS
Subdomena bez HTTPS: includeSubDomains przerwie działanie tej subdomeny Środowiska deweloperskie: HSTS zapisany z produkcji może zakłócić lokalne prace Nagłówki CDN/proxy: upewnij się, że pośrednicy nie usuwają nagłówka HSTS Mieszana zawartość: wszystkie zasoby muszą używać HTTPS; HSTS nie naprawia osadzonych zasobów HTTPHSTS jest niezbędny dla każdej witryny obsługującej wrażliwe dane i zdecydowanie zalecany dla wszystkich witryn HTTPS.