Przejdź do głównej treści
Bezpieczeństwo stron w UE: 10 kroków do lepszej oceny · Part 1

HSTS w 5 minut: Dlaczego 72% witryn w UE naraża swoich użytkowników

HTTP Strict Transport Security zapobiega atakom downgrade — a brakuje go na trzech z czterech europejskich witryn. Oto jak go włączyć.

· SiteGuardian

Część 1 serii „Bezpieczeństwo stron w UE: 10 kroków do lepszej oceny"


Problem w 30 sekund

Twoja witryna ma certyfikat TLS. Dobrze. Ale co się dzieje, gdy użytkownik wpisze http://twoja-domena.pl?

Bez HSTS: Przeglądarka łączy się nieszyfrowanie. Strona przekierowuje na HTTPS. Ale w milisekundach między żądaniem HTTP a przekierowaniem atakujący w tej samej sieci (kawiarnia, lotnisko, hotel) może przejąć połączenie. Man-in-the-middle, kradzież ciasteczek, przejęcie sesji — wszystko trywialne.

Z HSTS: Przeglądarka już wie, że ta domena akceptuje wyłącznie HTTPS. Łączy się szyfrowanie od razu. Żadnego żądania HTTP, żadnego przekierowania, żadnego okna ataku.

Jeden nagłówek. Jedna linia. A 72,4% europejskich witryn go nie ma.


Co mówią dane

Z SiteGuardian Benchmark obejmującego ponad 700 000 europejskich witryn:

  • 27,6% ma włączony HSTS
  • 75,7% przekierowuje na HTTPS — ale bez HSTS przekierowanie jest podatne na atak
  • 24,3% nie przekierowuje nawet, mimo posiadania ważnego certyfikatu

To oznacza: trzy na cztery witryny z certyfikatem TLS nie korzystają z niego konsekwentnie. Certyfikat jest, ochrony nie ma.


Czym dokładnie jest HSTS?

HTTP Strict Transport Security (RFC 6797) to nagłówek odpowiedzi HTTP, który mówi przeglądarce:

„Łącz się z tą domeną przez następne X sekund wyłącznie przez HTTPS. Ignoruj HTTP całkowicie."

Nagłówek wygląda tak:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age=31536000 — 1 rok (w sekundach). Przeglądarka zapamiętuje instrukcję na ten czas.
  • includeSubDomains — obejmuje wszystkie subdomeny (api.twoja-domena.pl, mail.twoja-domena.pl itd.)

Po pierwszej wizycie przeglądarka łączy się bezpośrednio przez HTTPS przy każdym kolejnym żądaniu — bez objazdu przez HTTP.


Jak włączyć HSTS

Apache (.htaccess lub vhost.conf)

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

Wymaganie: moduł mod_headers musi być aktywny.

Nginx

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Słowo always na końcu zapewnia wysyłanie nagłówka nawet na stronach błędów (4xx, 5xx).

Caddy

Caddy ustawia HSTS automatycznie, gdy HTTPS jest aktywne. Nie trzeba nic robić.

Node.js / Express

app.use((req, res, next) => {
  res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
  next();
});

Lub z pakietem helmet:

const helmet = require('helmet');
app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true }));

WordPress

Wtyczka „Really Simple SSL" lub „HTTP Headers" włącza HSTS jednym kliknięciem. Alternatywnie dodaj go do .htaccess (patrz Apache powyżej).

Hosting zarządzany (Cloudflare, AWS, Platform.sh itd.)

Większość dostawców hostingu nie ustawia HSTS domyślnie. Sprawdź panel zarządzania w sekcji „SSL/TLS" lub „Nagłówki HTTP". Jeśli opcja nie jest dostępna, utwórz plik .htaccess w katalogu głównym.


Trzy błędy, których należy unikać

1. Ustawienie zbyt krótkiego max-age

max-age=86400 (1 dzień) chroni tylko użytkowników, którzy odwiedzili stronę w ciągu ostatnich 24 godzin. Zacznij od 30 dni (2592000), a potem zwiększ do 1 roku (31536000), gdy wszystko działa.

2. Zapomnienie o includeSubDomains

Bez includeSubDomains subdomeny pozostają dostępne przez HTTP. Jeśli mail.twoja-domena.pl lub intranet.twoja-domena.pl nie mają TLS, dodaj includeSubDomains dopiero wtedy, gdy wszystkie subdomeny obsługują HTTPS — inaczej przestaną działać.

3. Włączenie HSTS bez działającego przekierowania HTTPS

HSTS wymaga, aby witryna była faktycznie dostępna przez HTTPS. Przetestuj przed włączeniem: przejdź na https://twoja-domena.pl. Jeśli widzisz błąd, najpierw napraw konfigurację certyfikatu TLS.


HSTS Preload: Następny krok

Gdy HSTS działa i masz pewność, że wszystkie subdomeny obsługują HTTPS, zgłoś domenę na listę HSTS preload:

  1. Ustaw nagłówek na: max-age=31536000; includeSubDomains; preload
  2. Zgłoś domenę na: hstspreload.org

Lista preload jest wbudowana w Chrome, Firefox, Safari i Edge. Domeny na liście są zawsze ładowane przez HTTPS — nawet przy pierwszej wizycie, zanim przeglądarka kiedykolwiek zobaczy nagłówek HSTS.


Związek z NIS2 i RODO

HSTS nie jest wymieniony z nazwy w żadnej ustawie. Ale:

  • NIS2 art. 21 ust. 2 lit. d) wymaga „bezpieczeństwa w nabywaniu, rozwijaniu i utrzymywaniu sieci i systemów informatycznych, w tym obsługi i ujawniania podatności". Brakujący nagłówek HSTS to znana, trywialnie wykorzystywalna podatność.

  • RODO art. 32 wymaga „odpowiednich środków technicznych" do ochrony danych osobowych. Szyfrowanie transportu bez HSTS to jak zamek bez zasuwki — wygląda na bezpieczny, ale można go otworzyć jednym ruchem.


Sprawdź swoją domenę

Włącz HSTS, poczekaj 5 minut i przeskanuj swoją domenę:

https://siteguardian.io/scan

Skan natychmiast pokaże, czy HSTS jest poprawnie ustawiony, czy includeSubDomains jest aktywne i czy Twoja domena kwalifikuje się na listę preload.


W następnym tygodniu w części 2: DMARC — od none do reject. Dlaczego policy=none nie chroni nikogo i jak osiągnąć skuteczną politykę DMARC w trzech krokach.

Ten artykuł jest częścią serii „Bezpieczeństwo stron w UE: 10 kroków do lepszej oceny". Dane z SiteGuardian EU Web Security Benchmark obejmującego ponad 700 000 europejskich witryn.

How does your website compare?

SiteGuardian scans your domain across six security dimensions — free, instant, no registration.

Scan your website

Bezpieczeństwo stron w UE: 10 kroków do lepszej oceny

This article is part of a weekly series on EU web security best practices.

SiteGuardian

2026-04-13

RSS