Blog · 5 listopada 2026 · 8 min czytania

Nagłówki bezpieczeństwa HTTP po ludzku

Każdy skaner bezpieczeństwa – także nasz darmowy szybki skan – wytyka firmowym stronom „brakujące nagłówki”. Brzmi groźnie, ale to zwykle sześć linijek konfiguracji, które da się dodać w godzinę. Ten tekst tłumaczy, co każda z nich robi, przed czym chroni Twoich klientów i jak ją włączyć bez psucia strony.

Czym w ogóle jest „nagłówek HTTP”

Kiedy przeglądarka pobiera Twoją stronę, serwer odsyła nie tylko treść, ale też krótką metryczkę: kilkanaście linijek typu „to jest HTML”, „zapamiętaj na godzinę”, „serwer: nginx”. To są nagłówki. Użytkownik ich nie widzi, ale przeglądarka czyta je i stosuje się do nich. Część z nich to instrukcje bezpieczeństwa: „nie pozwól, żeby ktoś wyświetlił tę stronę w ramce”, „łącz się ze mną tylko szyfrowanym połączeniem”.

Jeśli takich instrukcji nie ma, przeglądarka zakłada najbardziej liberalne ustawienia – te z lat dziewięćdziesiątych. Strona działa, ale Twoi klienci są bardziej narażeni na kilka klasycznych ataków. Dlatego skanery (Mozilla Observatory, securityheaders.com, Lighthouse, Webskan) punktują za ich brak, a klienci firmowi i audytorzy coraz częściej o nie pytają.

Sześć nagłówków, które liczą się najbardziej

NagłówekCo mówi przeglądarcePrzed czym chroniRyzyko włączenia
Strict-Transport-Security
HSTS
„Z tą domeną łącz się wyłącznie przez HTTPS, nawet jeśli ktoś wpisze http://”Podsłuch i podmiana treści w otwartym Wi-Fi (hotel, kawiarnia)Niskie, jeśli cała strona działa po HTTPS
Content-Security-Policy
CSP
„Skrypty, style i obrazy wolno ładować tylko z tych źródeł”Wstrzyknięcie obcego skryptu (XSS) – kradzież sesji, podmiana formularza płatnościWysokie przy złej konfiguracji – zaczynaj od trybu raportowania
X-Content-Type-Options„Nie zgaduj typu pliku – jeśli mówię, że to obraz, to jest obraz”Przemycenie skryptu w pliku podszywającym się pod obrazekPraktycznie zerowe
X-Frame-Options
lub CSP frame-ancestors
„Nie pozwalaj osadzać mnie w ramce na obcych stronach”Clickjacking – niewidzialna ramka z Twoim przyciskiem „Potwierdź” podłożona pod cudzą gręZerowe, chyba że sam osadzasz stronę w ramce gdzie indziej
Referrer-Policy„Odwiedzając inne strony z moich linków, nie zdradzaj pełnego adresu, z którego przyszedł użytkownik”Wyciek prywatnych adresów (np. link do resetu hasła lub panelu klienta) do obcych serwisówZerowe; może uszczuplić dane w cudzej analityce, nie w Twojej
Permissions-Policy„Ta strona nie potrzebuje kamery, mikrofonu ani lokalizacji”Nadużycie uprawnień przez obcy skrypt (np. z reklamy) wczytany na Twojej stronieZerowe, jeśli faktycznie z tych funkcji nie korzystasz

Dwa z nich warto rozumieć głębiej

HSTS – czyli „zawsze kłódka”

Większość stron ma dziś certyfikat i przekierowanie z http:// na https://. Problem w tym, że to pierwsze, nieszyfrowane żądanie nadal istnieje – i w otwartej sieci ktoś może je przechwycić, zanim nastąpi przekierowanie. HSTS każe przeglądarce zapamiętać: „od teraz do tej domeny wchodzę tylko po HTTPS”, więc po pierwszej wizycie nieszyfrowane żądanie w ogóle nie wychodzi.

Typowa wartość: max-age=31536000; includeSubDomains (rok, z poddomenami). Zanim ją włączysz, upewnij się, że każda poddomena, z której korzystasz (sklep., panel., poczta przez przeglądarkę), działa po HTTPS – inaczej przez rok będzie niedostępna dla każdego, kto raz odwiedził główną stronę. Jeśli nie masz pewności, zacznij bez includeSubDomains i z krótszym czasem, np. max-age=86400.

CSP – największy zysk i największe ryzyko

Content-Security-Policy to jedyny z tej szóstki nagłówek, który naprawdę trzeba dopasować do strony. Mówi przeglądarce, skąd wolno ładować skrypty, style, obrazy i czcionki. Dobrze ustawiony blokuje najgroźniejszą klasę ataków na strony firmowe: obcy skrypt wstrzyknięty przez dziurawą wtyczkę albo przejęte konto, który podmienia dane do przelewu albo wykrada to, co klient wpisuje w formularzu.

Źle ustawiony – blokuje Twój własny czat, mapę, piksel reklamowy albo galerię, i strona „przestaje działać” bez żadnego komunikatu dla użytkownika. Dlatego kolejność jest zawsze taka sama:

  1. Spisz, skąd Twoja strona ładuje zasoby: własna domena, Google Fonts, Google Analytics / Tag Manager, mapy, czat, YouTube, system płatności.
  2. Wdróż politykę w trybie tylko raportowania (Content-Security-Policy-Report-Only). Nic nie blokuje, tylko wypisuje w konsoli przeglądarki, co zostałoby zablokowane.
  3. Poklikaj po stronie na telefonie i komputerze, popraw listę źródeł, aż konsola będzie czysta.
  4. Dopiero wtedy zmień nazwę nagłówka na Content-Security-Policy.

Jeśli pełna polityka to za dużo na raz, sensowny pierwszy krok to sama dyrektywa frame-ancestors 'self' (nowoczesny odpowiednik X-Frame-Options) plus upgrade-insecure-requests. Już to podnosi wynik w skanerach i nie ma prawa niczego zepsuć.

Jak je włączyć – trzy najczęstsze sytuacje

1. Strona za Cloudflare (albo innym CDN)

Najprościej. W panelu Cloudflare: Rules → Transform Rules → Modify Response Header, dodaj statyczne nagłówki dla całej domeny. HSTS ma osobny przełącznik w SSL/TLS → Edge Certificates. Zmiany działają od razu i nie dotykasz serwera.

2. WordPress na zwykłym hostingu

Dwie drogi. Wtyczka (np. „Headers Security Advanced & HSTS WP” albo moduł nagłówków w wtyczkach typu Really Simple Security) – wygodnie, ale to kolejna wtyczka do utrzymania. Albo kilka linijek w pliku .htaccess (Apache / LiteSpeed, czyli większość polskich hostingów):

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

Zrób kopię pliku przed edycją. Jeśli po zapisaniu strona pokaże błąd 500, hosting nie ma włączonego modułu nagłówków – wtedy wtyczka albo prośba do supportu.

3. Własny serwer (nginx)

W bloku server konfiguracji:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Słowo always jest ważne: bez niego nginx pomija nagłówki na stronach błędów, a skanery to wychwytują.

Dwa nagłówki, które warto usunąć

Skanery patrzą też w drugą stronę: na to, czego serwer zdradza za dużo. Nagłówki Server: Apache/2.4.29 (Ubuntu) czy X-Powered-By: PHP/7.4.3 mówią napastnikowi dokładnie, jakie dziury sprawdzić. Sama nazwa („nginx”, „cloudflare”) to nic strasznego; numer wersji – już tak, zwłaszcza gdy jest stara. W PHP wyłącza to dyrektywa expose_php = Off, w Apache ServerTokens Prod, w nginx server_tokens off;. Na hostingu współdzielonym często nie masz do tego dostępu – wtedy napisz do supportu albo schowaj serwer za CDN.

Czego się nie bać

  • „Włączę nagłówki i strona się zepsuje”. Cztery z sześciu (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) są praktycznie bezpieczne na każdej stronie firmowej. HSTS wymaga jednej kontroli (czy wszystko jest po HTTPS). Tylko CSP trzeba przetestować.
  • „To ważne tylko dla banków”. Clickjacking i wstrzyknięte skrypty uderzają w zwykłe strony firmowe, bo są słabiej chronione. Najczęstszy scenariusz w Polsce to podmieniony numer konta na stronie z fakturą albo formularz kontaktowy wysyłający kopię danych gdzie indziej.
  • „Mam SSL, więc jestem bezpieczny”. Certyfikat szyfruje transmisję. Nie mówi przeglądarce nic o tym, co wolno zrobić z Twoją stroną po jej załadowaniu – od tego są nagłówki.

Sprawdź, których nagłówków brakuje Twojej stronie

Darmowy szybki skan Webskan sprawdza wszystkie sześć nagłówków, przekierowanie na HTTPS, wycieki wersji serwera i do tego wydajność na telefonie. Bez e-maila, bez rejestracji, wynik w ok. 30 sekund.

Potrzebujesz gotowej listy dla webmastera lub hostingu? Pełny audyt Webskan (99 zł) obejmuje certyfikat, przekierowania, wszystkie nagłówki i wycieki informacji o serwerze – razem z wydajnością, SEO technicznym, dostępnością i zepsutymi linkami, w jednym raporcie PDF z priorytetami.