Poradnik naprawy

Jak dodać brakujące nagłówki bezpieczeństwa w WordPressie

8 lutego 2026

Nagłówki bezpieczeństwa to nagłówki odpowiedzi HTTP, które mówią przeglądarkom, by aktywowały wbudowane funkcje bezpieczeństwa. Większości witryn WordPress domyślnie brakuje kilku z tych nagłówków, ponieważ ani rdzeń WordPressa, ani większość dostawców hostingu nie ustawia ich automatycznie. Dobra wiadomość jest taka, że dodanie ich zajmuje tylko kilka minut, a poprawa bezpieczeństwa jest znacząca. Ten przewodnik omawia każdy ważny nagłówek bezpieczeństwa, wyjaśnia, co robi, i pokazuje, jak dodać je wszystkie naraz.

Jakie nagłówki bezpieczeństwa powinna mieć każda witryna WordPress?

Oto pełna lista zalecanych nagłówków bezpieczeństwa z ich wartościami i przed czym chronią:

  • X-Frame-Options: SAMEORIGIN: zapobiega ładowaniu Twojej strony w iframe na innej domenie. To zapobiega atakom clickjacking, gdzie złośliwa strona nakłada niewidoczne przyciski na Twoją stronę.
  • X-Content-Type-Options: nosniff: zapobiega zgadywaniu przez przeglądarki typu MIME pliku. Bez tego atakujący mógłby wgrać plik, który wygląda jak obraz, ale zawiera JavaScript, a przeglądarka mogłaby go wykonać.
  • Referrer-Policy: strict-origin-when-cross-origin: kontroluje, ile informacji URL jest udostępnianych, gdy użytkownicy klikają linki do innych stron. To ustawienie wysyła pełny URL dla żądań w tym samym origin, ale tylko domenę dla żądań cross-origin, co chroni wrażliwe parametry URL.
  • Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(): wyłącza funkcje przeglądarki, których Twoja strona nie używa. Puste nawiasy oznaczają "nikt nie może używać tej funkcji", co zapobiega dostępowi złośliwych skryptów do kamery, mikrofonu lub lokalizacji.
  • Strict-Transport-Security: max-age=31536000; includeSubDomains: wymusza, by przeglądarki zawsze używały HTTPS. Zobacz nasz dedykowany przewodnik HSTS dla szczegółów bezpiecznego wdrażania.
  • X-XSS-Protection: 1; mode=block: legacy nagłówek dla starszych przeglądarek, który włącza wbudowany filtr XSS. Nowoczesne przeglądarki wycofały to na rzecz CSP, ale włączenie dla wstecznej kompatybilności nie zaszkodzi.
  • Content-Security-Policy: najpotężniejszy (i najbardziej złożony) nagłówek bezpieczeństwa. Zobacz nasz dedykowany przewodnik CSP dla pełnego wyjaśnienia.

Jak priorytetyzować: które nagłówki dodać najpierw

Jeśli dodajesz nagłówki bezpieczeństwa po raz pierwszy, to kolejność, która da Ci największą poprawę bezpieczeństwa przy najmniejszym ryzyku:

  1. X-Content-Type-Options: zero ryzyka zepsucia czegokolwiek. Po prostu dodaj.
  2. X-Frame-Options: bezpieczne, chyba że celowo osadzasz swoją stronę w iframe na innych domenach (mało prawdopodobne dla większości witryn WordPress).
  3. Referrer-Policy: bardzo niskie ryzyko. Zalecana wartość strict-origin-when-cross-origin jest już domyślnym zachowaniem w nowoczesnych przeglądarkach.
  4. Permissions-Policy: niskie ryzyko, chyba że Twoja strona faktycznie używa API kamery, mikrofonu lub geolokalizacji.
  5. X-XSS-Protection: legacy nagłówek, brak ryzyka.
  6. Strict-Transport-Security: wymaga najpierw działającego HTTPS. Postępuj według stopniowego wdrażania (zobacz nasz przewodnik HSTS).
  7. Content-Security-Policy: największe ryzyko zepsucia rzeczy w WordPressie. Zawsze zaczynaj w trybie Report-Only (zobacz nasz przewodnik CSP).

Dodawanie wszystkich nagłówków przez Apache .htaccess

To najczęstsza metoda dla witryn WordPress na hostingu współdzielonym. Otwórz plik .htaccess w katalogu głównym WordPressa i dodaj następujący blok. Umieść go przed sekcją # BEGIN WordPress, by zachować porządek:

<IfModule mod_headers.c>
    # Prevent clickjacking
    Header always set X-Frame-Options "SAMEORIGIN"

    # Prevent MIME-type sniffing
    Header always set X-Content-Type-Options "nosniff"

    # Control referrer information
    Header always set Referrer-Policy "strict-origin-when-cross-origin"

    # Restrict browser features
    Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"

    # Force HTTPS (only add if SSL is fully working)
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    # XSS Protection for legacy browsers
    Header always set X-XSS-Protection "1; mode=block"
</IfModule>

Kilka rzeczy do zapamiętania:

  • Wrapper IfModule zapewnia, że Apache nie da błędu 500, jeśli mod_headers nie jest włączony na Twoim serwerze.
  • Użycie Header always set (zamiast tylko Header set) zapewnia, że nagłówki są wysyłane przy wszystkich odpowiedziach, w tym przy stronach błędów.
  • Jeśli masz już blok <IfModule mod_headers.c> w swoim .htaccess, dodaj poszczególne linie Header wewnątrz istniejącego bloku, zamiast tworzyć duplikat.

Dodawanie wszystkich nagłówków przez Nginx

Jeśli Twoja witryna WordPress działa na Nginx (powszechne u zarządzanych hostów WordPress, takich jak Kinsta, Cloudways, GridPane lub SpinupWP), dodaj te linie wewnątrz bloku server:

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

Ważne kwestie specyficzne dla Nginx:

  • Słowo kluczowe always wysyła nagłówek przy wszystkich kodach odpowiedzi (w tym 4xx i 5xx). Bez tego Nginx wysyła nagłówki tylko przy odpowiedziach 2xx.
  • Jeśli masz osobny blok location obsługujący PHP (np. location ~ .php$), być może będziesz musiał dodać tam też nagłówki, w zależności od konfiguracji Nginx. Nginx nie dziedziczy dyrektyw add_header z bloków nadrzędnych, jeśli blok podrzędny ma własne add_header.
  • Zawsze testuj i przeładuj po zmianach: sudo nginx -t && sudo systemctl reload nginx.

Dodawanie nagłówków przez PHP w WordPressie

Jeśli nie masz dostępu do plików konfiguracyjnych serwera, możesz wysyłać nagłówki bezpieczeństwa z PHP. Dodaj to do functions.php swojego motywu lub do niestandardowej wtyczki specyficznej dla witryny:

function iwp_add_security_headers() {
    if ( is_admin() ) {
        return;
    }

    header( 'X-Frame-Options: SAMEORIGIN' );
    header( 'X-Content-Type-Options: nosniff' );
    header( 'Referrer-Policy: strict-origin-when-cross-origin' );
    header( 'Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()' );
    header( 'X-XSS-Protection: 1; mode=block' );
}
add_action( 'send_headers', 'iwp_add_security_headers' );

Sprawdzenie is_admin() pomija obszar administracyjny WordPress, by uniknąć potencjalnych konfliktów z funkcjonalnością admina. Pamiętaj, że to podejście PHP ma ograniczenie: dotyczy tylko stron przetwarzanych przez WordPress. Pliki statyczne (obrazy, CSS, JS, fonty) serwowane bezpośrednio przez serwer WWW nie noszą tych nagłówków. Dla pełnego pokrycia konfiguracja na poziomie serwera jest zawsze lepszym wyborem.

Wtyczki WordPress do nagłówków bezpieczeństwa

Jeśli wolisz podejście wtyczkowe, te opcje oferują przyjazny interfejs do zarządzania nagłówkami bezpieczeństwa:

  • HTTP Headers: bezpłatna wtyczka z rozbudowanym UI do ustawiania wszystkich nagłówków bezpieczeństwa. Wspiera X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy i więcej. Konfigurujesz wszystko z obszaru administracyjnego WordPress bez dotykania plików.
  • Really Simple SSL Pro: wersja premium zawiera moduł nagłówków bezpieczeństwa, gdzie możesz włączać lub wyłączać poszczególne nagłówki. Daje też rekomendacje i wyjaśnia każdy nagłówek.
  • Headers Security Advanced & HSTS WP: ukierunkowana wtyczka specjalnie dla nagłówków bezpieczeństwa. Pokrywa wszystkie ważne nagłówki i zawiera presety dla typowych konfiguracji.
  • Security Headers od Jeremykendall: lekka opcja, która dodaje wszystkie zalecane nagłówki z rozsądnymi domyślnymi wartościami.

Choć wtyczki są wygodne, mają wady. Jeśli wtyczka zostanie dezaktywowana, zaktualizowana z błędem lub usunięta, Twoje nagłówki bezpieczeństwa natychmiast znikają. Dla witryn produkcyjnych konfiguracja na poziomie serwera jest bardziej niezawodna, ponieważ nie zależy od WordPressa ani aktywnej wtyczki.

Testowanie nagłówków z narzędziami online

Po dodaniu zweryfikuj nagłówki tymi bezpłatnymi narzędziami:

  • securityheaders.com: wprowadź swój URL i otrzymaj ocenę od A+ do F wraz ze szczegółowym przeglądem, które nagłówki są obecne, a których brakuje. Dąż co najmniej do oceny A.
  • observatory.mozilla.org: narzędzie Mozilla wykonuje bardziej rozbudowaną analizę, w tym ocenę CSP i bezpieczeństwa ciasteczek.
  • DevTools przeglądarki: naciśnij F12, przejdź do zakładki Network, kliknij żądanie głównego dokumentu i przewiń do Response Headers, by dokładnie zobaczyć, co wysyła Twój serwer.

Możesz też sprawdzić z linii poleceń:

curl -sI https://example.com

Pokazuje to wszystkie nagłówki odpowiedzi, w tym Twoje nowo dodane nagłówki bezpieczeństwa.

Kwestie CDN i reverse proxy

Jeśli Twoja witryna WordPress jest za CDN takim jak Cloudflare, Sucuri lub Fastly, pamiętaj, że CDN może usuwać nagłówki, nadpisywać je lub dodawać własne. Oto co musisz wiedzieć:

  • Cloudflare: domyślnie nie usuwa nagłówków bezpieczeństwa, więc nagłówki ustawione na Twoim serwerze origin są przekazywane. Cloudflare oferuje też własne ustawienia nagłówków bezpieczeństwa w dashboardzie pod SSL/TLS > Edge Certificates (dla HSTS) i w managed rules.
  • Sucuri: ich firewall może automatycznie dodawać niektóre nagłówki bezpieczeństwa. Sprawdź ustawienia w dashboardzie Sucuri, by zobaczyć, które są aktywne, i uniknąć duplikatów.
  • Fastly / KeyCDN / BunnyCDN: większość CDN pozwala dodawać niestandardowe nagłówki odpowiedzi w panelu konfiguracji. Może to być dobra alternatywa, jeśli nie możesz zmienić konfiguracji serwera origin.

Jeśli widzisz zduplikowane nagłówki w swojej odpowiedzi (np. dwie linie X-Frame-Options), może to spowodować nieprzewidywalne zachowanie przeglądarki. Upewnij się, że każdy nagłówek jest ustawiony tylko w jednym miejscu: albo na serwerze origin, albo na poziomie CDN, nie obu.

Typowe błędy przy dodawaniu nagłówków bezpieczeństwa

  • Zduplikowane bloki IfModule: jeśli Twój .htaccess ma już blok <IfModule mod_headers.c> (być może z wtyczki), dodanie drugiego może powodować konflikty. Połącz nagłówki w istniejącym bloku.
  • Ustawianie nagłówków tylko przez PHP: omija to wszystkie pliki statyczne. Użyj konfiguracji na poziomie serwera dla pełnego pokrycia.
  • Nadpisywanie nagłówków w blokach location (Nginx): jeśli blok location potomny ma choćby jeden add_header, zastępuje wszystkie nagłówki z bloku nadrzędnego. Musisz powtórzyć wszystkie nagłówki w każdym bloku location, który definiuje własne.
  • Brak testowania po aktualizacjach wtyczek: aktualizacja wtyczki lub zmiana motywu może usunąć Twoje nagłówki oparte na PHP. Zawsze testuj ponownie po dużych zmianach.
  • Zapominanie o subdomenach: jeśli masz subdomeny (staging, mail itp.), upewnij się, że one też mają skonfigurowane nagłówki bezpieczeństwa. Atakujący często celują w najsłabszą subdomenę.

Zweryfikuj swoje nagłówki bezpieczeństwa z InspectWP

Po dodaniu wszystkich nagłówków wykonaj nowy skan InspectWP na swojej witrynie WordPress. Sekcja bezpieczeństwa Twojego raportu wymienia każdy nagłówek bezpieczeństwa i pokazuje status. Każdy nagłówek, który jest obecny i poprawnie skonfigurowany, pojawia się jako zielony. Brakujące nagłówki pojawiają się jako czerwone lub żółte, w zależności od ich ważności. Użyj funkcji automatycznych raportów InspectWP, by monitorować swoje nagłówki w czasie i wykryć regresje spowodowane zmianami serwera lub aktualizacjami wtyczek.

Sprawdź teraz swoją stronę WordPress

InspectWP analizuje Twoją stronę WordPress pod kątem bezpieczeństwa, problemów SEO, zgodności z RODO i wydajności — za darmo.

Przeanalizuj stronę za darmo