Nagłówki bezpieczeństwa HTTP - co ustawić i jak (HSTS, CSP i inne)
10 lipca 2026 · 4 min czytania · zaktualizowano 29 września 2026
Przy każdym otwarciu strony serwer wysyła zestaw nagłówków HTTP - metadanych, które sterują zachowaniem przeglądarki. Część z nich to nagłówki bezpieczeństwa: kilka linijek w konfiguracji serwera, które realnie chronią użytkowników przed popularnymi atakami. Poniżej znajdziesz, co ustawić, z przykładowymi wartościami, gotową konfiguracją dla Apache i nginx oraz ostrzeżeniami, jak nie zepsuć przy tym strony.
Najważniejsze nagłówki i ich wartości
| Nagłówek | Przykładowa wartość | Przed czym chroni | Uwaga |
|---|---|---|---|
Strict-Transport-Security (HSTS) | max-age=31536000; includeSubDomains | Połączeniem bez szyfrowania i podmianą na wersję http | Działa tylko przy HTTPS. Opcji preload używaj świadomie: trudno ją wycofać |
Content-Security-Policy (CSP) | default-src 'self'; frame-ancestors 'none' | Wstrzykiwaniem skryptów (XSS), osadzaniem w ramce | Źle ustawiona blokuje własne skrypty strony; zacznij od trybu Report-Only |
X-Content-Type-Options | nosniff | „Zgadywaniem” typu plików przez przeglądarkę | Bezpieczny do włączenia od razu |
X-Frame-Options | DENY lub SAMEORIGIN | Clickjackingiem, czyli osadzaniem strony w niewidocznej ramce | Nowszy odpowiednik to frame-ancestors w CSP; warto ustawić oba |
Referrer-Policy | strict-origin-when-cross-origin | Wyciekiem pełnych adresów URL do innych stron | Bezpieczny do włączenia od razu |
Permissions-Policy | geolocation=(), camera=(), microphone=() | Użyciem funkcji urządzenia przez osadzone skrypty | Wyłącz to, czego strona nie używa |
Nagłówka X-XSS-Protection, zalecanego w starszych poradnikach, nie trzeba już ustawiać. Chrome, Edge i Firefox go nie obsługują, a OWASP zaleca go nie ustawiać (albo ustawić na 0), bo przed XSS skutecznie chroni CSP.
Jak dodać nagłówki na serwerze
Apache (.htaccess)
<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 "geolocation=(), camera=(), microphone=()"
Header always set Content-Security-Policy-Report-Only "default-src 'self'"
</IfModule>
nginx
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 "geolocation=(), camera=(), microphone=()" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'" always;
Dwie pułapki: w Apache potrzebny jest moduł mod_headers (na większości hostingów jest włączony), a w nginx dyrektywy add_header z bloku server nie są dziedziczone przez blok location, który ma własne add_header. Wtedy trzeba je tam powtórzyć.
Na hostingu współdzielonym zwykle wystarczy plik .htaccess. W WordPressie część nagłówków ustawiają wtyczki bezpieczeństwa, a przy Cloudflare można je dodać regułami w panelu. Po zmianach sprawdź wynik w podglądzie nagłówków HTTP.
Jak wdrożyć CSP, nie psując strony
Content-Security-Policy to najskuteczniejszy, ale też najbardziej ryzykowny nagłówek. Mówi przeglądarce, skąd wolno ładować skrypty, style, obrazy i czcionki. Wszystko spoza listy zostaje zablokowane, także Twoja analityka, czat czy osadzone filmy, jeśli o nich zapomnisz.
- Zacznij od nagłówka
Content-Security-Policy-Report-Only(jak w konfiguracji powyżej). Przeglądarka tylko zgłasza naruszenia w konsoli narzędzi deweloperskich, niczego nie blokuje. - Przejrzyj najważniejsze podstrony i dopisz do polityki źródła, z których faktycznie ładujesz zasoby, np.
script-src 'self' https://www.googletagmanager.com. - Unikaj
'unsafe-inline'wscript-src, bo niweczy ochronę przed XSS. Skrypty wpisane bezpośrednio w HTML lepiej przenieść do plików albo oznaczyć jednorazowym znacznikiem (nonce). - Gdy konsola jest czysta, zmień nazwę nagłówka na
Content-Security-Policy.
Jak liczymy ocenę A-F
Nasza ocena nagłówków bezpieczeństwa sprawdza obecność sześciu nagłówków i przyznaje za nie punkty:
- Content-Security-Policy - 25 pkt,
- Strict-Transport-Security - 20 pkt,
- X-Content-Type-Options, X-Frame-Options i Referrer-Policy - po 15 pkt,
- Permissions-Policy - 10 pkt.
Ocena A to co najmniej 90 punktów, B - 75, C - 55, D - 40, E - 20. Nagłówek Content-Security-Policy-Report-Only nie jest liczony jako CSP, bo niczego nie blokuje, więc w fazie testów wynik wyniesie 75 punktów (B). Test sprawdza, czy nagłówek jest ustawiony, a nie, czy jego wartość jest optymalna. Wynik A to dobry początek, a nie gwarancja bezpieczeństwa.
Bezpieczeństwo to więcej niż nagłówki
Nagłówki działają w parze z ważnym certyfikatem: HSTS ma sens tylko przy HTTPS. Jak działa certyfikat i co oznaczają błędy, wyjaśniamy w poradniku o certyfikatach SSL, a stan swojego sprawdzisz w teście certyfikatu. Warto też wiedzieć, na czym stoi Twoja strona i czy nie zdradza wersji oprogramowania - pomoże w tym poradnik o wykrywaniu technologii. Z zewnątrz nie powinny być też dostępne zbędne usługi, co opisujemy we wpisie o otwartych portach.