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łówek | Co mówi przeglądarce | Przed czym chroni | Ryzyko 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ści | Wysokie 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 obrazek | Praktycznie 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ów | Zerowe; 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 stronie | Zerowe, 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:
- Spisz, skąd Twoja strona ładuje zasoby: własna domena, Google Fonts, Google Analytics / Tag Manager, mapy, czat, YouTube, system płatności.
- Wdróż politykę w trybie tylko raportowania (
Content-Security-Policy-Report-Only). Nic nie blokuje, tylko wypisuje w konsoli przeglądarki, co zostałoby zablokowane. - Poklikaj po stronie na telefonie i komputerze, popraw listę źródeł, aż konsola będzie czysta.
- 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.