Przejdź do treści
SEOMaster SEOMaster

Nagłówki bezpieczeństwa — wdrożenie krok po kroku bez psucia strony

Sześć nagłówków, które zamykają najczęstsze drogi ataku. Kolejność wdrożenia ma znaczenie: dwa ostatnie potrafią popsuć stronę, jeśli wprowadzisz je bez okresu obserwacji.

Autor: Redakcja SEOMaster · opublikowano 16.08.2026 · aktualizacja 27.08.2026

Nagłówki bezpieczeństwa — wdrożenie krok po kroku bez psucia strony
Bezpieczna kolejność wdrożenia nagłówków
Bezpieczna kolejność wdrożenia nagłówków
EtapWdrożenieWarunek przejścia
1. Niskie ryzykoX-Content-Type-Options, Referrer-Policy i ochrona przed osadzaniem w ramceKluczowe podstrony, formularze i osadzone elementy działają bez zmian
2. UprawnieniaPermissions-Policy dopasowane do używanych funkcji i widżetówKamera, mikrofon, geolokalizacja i płatności działają tylko tam, gdzie są potrzebne
3. Obserwacja CSPContent-Security-Policy-Report-Only i zbieranie raportów przez co najmniej tydzieńLista legalnych źródeł obejmuje skrypty, style, obrazy, ramki i połączenia
4. Egzekwowanie CSPWłaściwy Content-Security-Policy bez zbędnych wyjątkówNie ma naruszeń dla realnych scenariuszy ani zależności od nieznanych domen
5. Stopniowe HSTSNajpierw krótki max-age, potem dłuższy czas i dopiero sprawdzone includeSubDomainsKażda objęta subdomena stale obsługuje HTTPS z ważnym certyfikatem

Nagłówki bezpieczeństwa to instrukcje, które serwer wysyła przeglądarce razem ze stroną. Mówią jej, czego NIE wolno zrobić: nie wykonuj skryptów z obcych domen, nie osadzaj mnie w ramce, nie łącz się ze mną po HTTP. Kosztują jedną linijkę konfiguracji i nic nie spowalniają.

Kolejność poniżej jest ułożona według ryzyka. Pierwsze trzy możesz wdrożyć od ręki, czwarty wymaga sprawdzenia, a dwa ostatnie mają realny potencjał zepsucia strony, jeśli je przyspieszysz.

Bez ryzyka — wdrażaj od razu

1. X-Content-Type-Options: nosniff

Zabrania przeglądarce zgadywania typu pliku. Bez tego przesłane przez użytkownika zdjęcie z kodem w środku może zostać wykonane jako skrypt. Nie ma żadnych efektów ubocznych.

add_header X-Content-Type-Options "nosniff" always;

2. Referrer-Policy

Ogranicza to, co Twoja strona zdradza obcym serwerom o adresie, z którego przyszedł użytkownik. Bez tego pełny adres z parametrami — czasem z tokenem albo identyfikatorem zamówienia — trafia do każdego zewnętrznego zasobu.

add_header Referrer-Policy "strict-origin-when-cross-origin" always;

3. X-Frame-Options

Zamyka clickjacking: atakujący nie osadzi Twojej strony w niewidocznej ramce na swojej. Wybierz DENY, chyba że sam osadzasz swoją stronę gdzie indziej — wtedy użyj frame-ancestors w CSP.

add_header X-Frame-Options "DENY" always;

X-Frame-Options — pełne wyjaśnienie — pełna definicja w słowniku

Wymaga sprawdzenia

4. Permissions-Policy

Wyłącza dostęp do kamery, mikrofonu, geolokalizacji i innych funkcji urządzenia — dla Twojej strony i dla wszystkiego, co na niej osadzasz. Sprawdź wcześniej, czy któryś z Twoich widżetów ich nie używa.

add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()" always;

Wymaga okresu obserwacji

5. HSTS — zaczynaj od krótkiego czasu

HSTS każe przeglądarce łączyć się z Twoją domeną WYŁĄCZNIE po HTTPS, jeszcze zanim wyśle pierwsze żądanie. Zamyka lukę, w której pierwsze połączenie po HTTP można przechwycić. Jest też jedynym nagłówkiem, którego nie da się szybko cofnąć: przeglądarka pamięta go przez zadeklarowany czas.

# Krok 1 — piec minut, na sprawdzenie
add_header Strict-Transport-Security "max-age=300" always;

# Krok 2 — po tygodniu bez problemow
add_header Strict-Transport-Security "max-age=604800; includeSubDomains" always;

# Krok 3 — docelowo
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Zanim dodasz includeSubDomains: Ta dyrektywa obejmuje WSZYSTKIE subdomeny, także te, o których zapomniałeś: stary serwer testowy, panel dostawcy, subdomenę pocztową. Każda z nich musi mieć działający certyfikat, inaczej stanie się niedostępna.

HSTS — pełne wyjaśnienie — pełna definicja w słowniku

6. CSP — najpierw raportowanie, dopiero potem egzekwowanie

Content Security Policy to najsilniejszy z tych nagłówków i jedyny, który realnie zatrzymuje wstrzyknięcie obcego skryptu. Jest też jedynym, który przy błędnej konfiguracji potrafi wyłączyć pół strony.

# Faza 1: NIC nie blokuje, tylko raportuje, co by zablokowal
add_header Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-report" always;

Zostaw to na tydzień i zbieraj zgłoszenia. Zobaczysz w nich każdą domenę, z której coś się wczytuje — łącznie z tymi, o których nie wiedziałeś. Dopiero gdy lista jest kompletna, zbuduj z niej właściwą politykę.

# Faza 2: egzekwowanie, z domenami z zebranych raportow
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-ancestors 'none'" always;

Dlaczego unsafe-inline w script-src psuje cały sens: Ta wartość pozwala uruchomić dowolny skrypt osadzony w kodzie strony — czyli dokładnie to, przed czym CSP ma chronić. Jeśli musisz mieć skrypty w kodzie, użyj jednorazowych wartości nonce generowanych przy każdym żądaniu.

CSP — pełne wyjaśnienie — pełna definicja w słowniku

Gotowa konfiguracja

Nginx

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

Apache

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

Vercel

{
  "headers": [{
    "source": "/(.*)",
    "headers": [
      { "key": "X-Content-Type-Options", "value": "nosniff" },
      { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
      { "key": "X-Frame-Options", "value": "DENY" }
    ]
  }]
}

Jak sprawdzić, że działa

Najprościej poleceniem curl — zobaczysz dokładnie to, co dostaje przeglądarka. Nasz analizator sprawdza wszystkie te nagłówki naraz i pokazuje, ile innych stron je ma, więc od razu wiesz, czy jesteś w tyle, czy z przodu.

curl -sI https://twojadomena.pl | grep -iE 'strict-transport|content-security|x-frame|x-content-type|referrer-policy|permissions-policy'

Najczęstsze pytania

Czy nagłówki bezpieczeństwa wpływają na SEO?

Nie bezpośrednio. Wpływa natomiast to, do czego prowadzi ich brak: przejęta strona z wstrzykniętym spamem traci pozycje i trafia na listy ostrzeżeń, a ostrzeżenie w przeglądarce odcina ruch skuteczniej niż jakikolwiek spadek rankingu.

Który nagłówek wdrożyć pierwszy, jeśli mam czas tylko na jeden?

X-Content-Type-Options z wartością nosniff. Jest jednolinijkowy, nie ma żadnych efektów ubocznych i zamyka całą klasę ataków polegających na tym, że przeglądarka zgaduje typ pliku i wykonuje przesłane zdjęcie jako skrypt.

Czy CSP zablokuje moją analitykę?

Tak, jeśli nie dopiszesz jej domen do dyrektyw. Dlatego wdrożenie zaczyna się od trybu raportowania, który pokazuje wszystko, co zostałoby zablokowane, nie blokując niczego naprawdę.

Ile czasu ustawić w HSTS?

Zacznij od 300 sekund i sprawdź, czy nic się nie psuje. Potem tydzień, potem rok. Nie zaczynaj od roku: jeśli certyfikat wygaśnie albo trafisz na subdomenę bez HTTPS, użytkownicy nie będą mogli wejść na stronę, a Ty nie cofniesz tego zdalnie.

Pojęcia z tego poradnika

Wszystkie poradniki · Cała Wiedza · Sprawdź to na swojej stronie