Nagłówek HSTS
ważność wysokamierzonysposób security_headers
Strict-Transport-Security wymusza HTTPS przy kolejnych wizytach. Brak to możliwy downgrade do HTTP.
WIKI
artykuł z 16.09.2026 · źródeł 7Nagłówek HSTS to parametr monitoringu stron internetowych, który sprawdza, czy odpowiedź serwera przesłana przez HTTPS zawiera nagłówek Strict-Transport-Security. Pomiar kończy się jednym z trzech wyników: nagłówek obecny, brak nagłówka albo nie udało się pobrać odpowiedzi. HSTS (HTTP Strict Transport Security) to mechanizm, którym witryna deklaruje, że jest dostępna wyłącznie przez bezpieczne połączenia [1].
Jak działa
Serwer wysyła nagłówek w odpowiedzi HTTPS. Wymagana dyrektywa max-age podaje liczbę sekund, przez które przeglądarka traktuje host jako znany host HSTS [1]. Opcjonalna dyrektywa includeSubDomains rozciąga politykę na wszystkie subdomeny [1]. Nagłówek otrzymany przez nieszyfrowane HTTP przeglądarka musi zignorować [1], bo inaczej atakujący w środku połączenia mógłby skrócić ważność polityki albo dodać ją hostowi bez HTTPS [2]. Jeśli odpowiedź zawiera kilka takich nagłówków, przetwarzany jest tylko pierwszy [1].
Przy kolejnej wizycie przeglądarka, zanim załaduje adres http, sprawdza nazwę domeny na liście hostów HSTS. Przy dopasowaniu, jeszcze przed wysłaniem żądania, zamienia schemat na https, a port 80 na 443 [1] [2]. W Chromium ta zamiana jest wewnętrznym przekierowaniem z kodem 307, wybranym po to, by zachować metodę żądania, np. POST [7]. Na znanym hoście HSTS przeglądarka musi zerwać połączenie przy każdym błędzie bezpiecznego transportu [1] i nie pozwala użytkownikowi ominąć ostrzeżenia o certyfikacie [2] [4].
Pierwsze żądanie nie jest chronione: host HSTS, który dostaje żądanie przez HTTP, powinien odpowiedzieć stałym przekierowaniem na HTTPS [1], ale tę odpowiedź atakujący może jeszcze przechwycić. Lukę łagodzi lista wstępnie załadowana (ang. preload list), czyli polityka HSTS wpisana do przeglądarki przez jej producenta [1].
Standardy i specyfikacje
- RFC 6797 (listopad 2012) definiuje nagłówek
Strict-Transport-Securityoraz dyrektywymax-ageiincludeSubDomains. Jako zagrożenia, którym mechanizm ma przeciwdziałać, wymienia pasywnych i aktywnych atakujących w sieci oraz błędy twórców witryn [1]. Wartośćmax-age=0oznacza polecenie, by przeglądarka przestała traktować host jako znany host HSTS [1]. Specyfikacja opisuje też listy wstępnie załadowane jako mechanizm konfigurowany przez producentów przeglądarek [1]. - Dyrektywa
preloadnie należy do specyfikacji HSTS [2]. Wymagania stawia lista prowadzona przez projekt Chromium: ważny certyfikat, przekierowanie z HTTP na HTTPS na tym samym hoście, wszystkie subdomeny po HTTPS oraz nagłówek na domenie głównej zmax-ageco najmniej 31536000 sekund,includeSubDomainsipreload[3]. Dodatkowe przekierowanie wysyłane przez HTTPS też musi mieć nagłówek HSTS [3]. Firefox, Safari i Edge używają list opartych na liście Chrome [3]. - OWASP zaleca wartość
max-age=63072000; includeSubDomains; preloadi zastrzega, że przy błędnej konfiguracji albo problemie z certyfikatem prawowici użytkownicy mogą stracić dostęp do strony [5]. Ściąga OWASP o HSTS wymienia trzy zagrożenia, którym nagłówek zapobiega: ręcznie wpisany lub zapisany w zakładkach adreshttp, odnośniki po HTTP w aplikacji przeznaczonej dla HTTPS oraz akceptację nieprawidłowego certyfikatu [4].
Zagrożenia i skutki
SSL stripping. Moxie Marlinspike na konferencji Black Hat DC w 2009 roku zwrócił uwagę, że użytkownicy trafiają na HTTPS na dwa sposoby: klikając odnośnik albo przez przekierowanie 302, czyli zawsze najpierw przez HTTP [6]. Opisane przez niego narzędzie sslstrip obserwuje ruch HTTP, zamienia odnośniki https:// na http:// oraz nagłówki Location, a do serwera łączy się już po HTTPS [6]. Serwer nie widzi różnicy, a przeglądarka nie wyświetla ostrzeżeń [6]. Jako wynik 24 godzin działania tej techniki autor podał 117 kont poczty, 16 numerów kart płatniczych, 7 loginów PayPal i ponad 300 innych danych logowania [6]. Ściąga OWASP o HSTS wskazuje sslstrip jako materiał źródłowy [4].
Pierwsza wizyta. HSTS zaczyna działać dopiero po co najmniej jednym bezpiecznym połączeniu z hostem i odebraniu nagłówka [2]. RFC 6797 nazywa to podatnością bootstrap MITM: użytkownik wpisuje adres albo klika odnośnik http do hosta, którego przeglądarka jeszcze nie zna [1]. Wpis na liście preload tę lukę łagodzi [2].
Subdomeny bez HTTPS. Z includeSubDomains każda subdomena bez poprawnie skonfigurowanego bezpiecznego połączenia staje się dla przeglądarki nieosiągalna [1]. Bez tej dyrektywy pozostaje natomiast możliwy atak przez ciasteczka, którymi mogą manipulować subdomeny [4].
Trudne wycofanie. Domenę można usunąć z listy preload, ale zmiana dociera do użytkowników z aktualizacją Chrome po miesiącach [3]. Dlatego lista zaleca zgłoszenie dopiero wtedy, gdy cała witryna i wszystkie subdomeny mogą długoterminowo działać po HTTPS, oraz stopniowe podnoszenie max-age [3].
Prywatność. Zapamiętywana polityka HSTS może posłużyć do identyfikacji użytkowników bez ciasteczek [4]. RFC 6797 opisuje to jako możliwą formę śledzenia [1].
Przykłady
| Nagłówek albo sytuacja | Skutek w przeglądarce |
|---|---|
| brak nagłówka | brak polityki; każde wejście przez http:// może zostać przechwycone [2] [6] |
max-age=31536000; includeSubDomains | host i subdomeny tylko po HTTPS przez rok [2] |
max-age=63072000; includeSubDomains; preload | spełnia wymagania listy preload [3] |
max-age=300, potem 604800, potem 2592000 (z includeSubDomains) | etapowe wdrożenie: 5 minut, tydzień, miesiąc [3] |
max-age=0 | przeglądarka przestaje traktować host jako znany host HSTS [1] |
| nagłówek wysłany po HTTP | ignorowany [1] |
includeSubDomains, subdomena bez HTTPS | subdomena nieosiągalna [1] |
| błąd certyfikatu na znanym hoście HSTS | połączenie zerwane, bez możliwości obejścia [1] [2] |
- [1] RFC 6797 — HTTP Strict Transport Security (HSTS) · IETF
- [2] Strict-Transport-Security header · MDN Web Docs
- [3] HSTS Preload List Submission · Chromium Project
- [4] HTTP Strict Transport Security Cheat Sheet · OWASP
- [5] HTTP Security Response Headers Cheat Sheet · OWASP
- [6] Moxie Marlinspike — New Tricks For Defeating SSL In Practice (Black Hat DC 2009) · Black Hat
- [7] net/url_request/url_request_http_job.cc — kod źródłowy Chromium · Chromium Project
STATS
wyniki z systemu · tylko liczby zbiorczeTen parametr nie zapisuje odczytu per strona — przebieg zostawia tylko ustalenia, więc liczby sprawdzonych stron i wyników „ok” system nie ma. Pojawią się po wdrożeniu zapisu przebiegów per strona per parametr.
Ten parametr nie otworzył jeszcze żadnego ustalenia w bazie LAB247. Pusto nie znaczy „czysto” — znaczy, że nic nie przekroczyło reguły.
- Przebiegów
- 33sposób security_headers
- W 30 dni
- 33przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- —33 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 16.09.2026| Obszar i ważność | Bezpieczeństwo · wysoka (B14) |
|---|---|
| Workflow i częstotliwość | creato_ping_security_v2 · P3 działa na LAB247cron co 24 h, T1–T3; T4 raz po anomalii · Dokładny skan. dns_integrity porównuje NS, MX, SPF i DMARC z wzorcem z poprzedniego przebiegu. |
| Sonda i helper | sposób security_headers · CREATO_PING/helpers/security_headers.py |
| Testy |
|
| Typ wyniku | 0 albo 1 ustalenie missing_hsts |
| Jednostka | brak — wynik jakościowy (obecność nagłówka) |
| Próg i reguła | Timeout 6,0 s, połączenie 2,0 s (stała w helperze). Reguła: brak nagłówka = missing_hsts; nagłówek z dowolną wartością, także max-age=0, = ok. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/security_headers.py → _CHECKS, _TIMEOUTCREATO_PING/helpers/security_runner.py → _TASK_SEVERITIES (dalej idą tylko urgent i high)CREATO_PING/config/incident_policy.toml → [finding] missing_hsts |
| Retencja odczytów | Żadna: przebieg nie zapisuje odczytu, a przy gate=false nie powstaje też subtask. Ustalenia w bazie LAB247 pochodzą z importu ClickUp sprzed zmiany polityki. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/security_headers.py · CREATO_PING/helpers/security_runner.py · CREATO_PING/config/incident_policy.toml · CREATO_PING/workflows/_prod/creato_ping_security_v2.json · odczyt 16.09.2026 |
Helper zgłasza powagę wysoką, więc ustalenie przechodzi filtr przebiegu. Polityka nadpisuje je na normalne, bez skutku i gate=false: brak subtaska, status strony bez zmian. Przebieg produkcyjny idzie z --no-stats, więc nie zostaje nawet wpis w statystykach dziennych. Utwardzenie, nie incydent.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| Brak HSTSmissing_hsts | Normalne | Ewidentne | bez wpływu | nie / nie | Dodaj nagłówek HSTS w konfiguracji serwera. |
LOOP
pętli: 1Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Sygnał: Przegląd polityki incydentów: brak nagłówka HSTS zakładał subtask „podatna”, choć to brak utwardzenia, nie incydent.
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręczniewłaściciel zatwierdził tabelę polityki
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionenagłówki bezpieczeństwa: gate=false
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-07-15 | missing_hsts: z „wysokie → podatna” na normalne, bez skutku, gate=false, bez alarmu. Pozostałe nagłówki dostały gate=false w tej samej tabeli, ale bez skutku: helper nadaje im powagę normalną albo niską, więc i wcześniej nie przechodziły filtra przebiegu.config/incident_policy.toml · helpers/incident_policy.py · helpers/clickup_writer_v2.py | Nagłówek to dobra praktyka utwardzenia, a nie aktywny incydent; mniej szumu na tablicy zadań. | cały system To samo wydanie przeniosło decyzję „zakładać zadanie czy nie” z progu powagi na pole gate w polityce — dla wszystkich ustaleń bezpieczeństwa. | d59385ebez replayuzatwierdził: właściciel, 2026-07-11 (cała tabela polityki) |