Jak poprawnie konfigurować nagłówki bezpieczeństwa (CSP, HSTS, X-Frame-Options)

Nawet najlepiej zabezpieczony WordPress może być podatny na ataki, jeśli nie stosuje odpowiednich nagłówków bezpieczeństwa HTTP.
To właśnie one decydują, jakie zasady przeglądarka stosuje wobec Twojej strony – np. czy może być osadzona w ramce, czy może ładować zewnętrzne skrypty, czy wymusza połączenia HTTPS.

W tym poradniku pokażę, jak dodać i skonfigurować najważniejsze nagłówki bezpieczeństwa w WordPressie:

  • Content Security Policy (CSP)
  • HTTP Strict Transport Security (HSTS)
  • X-Frame-Options
    a także kilka dodatkowych, które warto uwzględnić.

Co to są nagłówki bezpieczeństwa?

Nagłówki bezpieczeństwa to specjalne instrukcje wysyłane przez serwer w odpowiedzi HTTP.
Są przetwarzane przez przeglądarkę użytkownika i określają, jakie zasady bezpieczeństwa obowiązują na stronie.

Przykład odpowiedzi serwera:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Security-Policy: default-src 'self'
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Frame-Options: SAMEORIGIN

1. Content Security Policy (CSP)

CSP (Content Security Policy) to jeden z najpotężniejszych nagłówków bezpieczeństwa.
Chroni stronę przed atakami XSS (Cross-Site Scripting) i wstrzykiwaniem złośliwych skryptów.

Przykład konfiguracji CSP:

Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"

Co oznaczają poszczególne dyrektywy:

  • default-src 'self' — domyślnie zezwala tylko na zasoby z tej samej domeny,
  • script-src 'self' https://cdn.jsdelivr.net — pozwala ładować skrypty tylko z lokalnej domeny i wskazanego CDN,
  • style-src 'self' 'unsafe-inline' — dopuszcza style lokalne i inline (często potrzebne w WordPressie),
  • img-src 'self' data: — obrazy mogą być ładowane z lokalnego źródła lub inline (base64).

Uwaga:
CSP to bardzo czuły nagłówek — błędna konfiguracja może „złamać” wygląd strony.
Najlepiej najpierw przetestować politykę w trybie raportowania:

Header set Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-report-endpoint/"

2. HTTP Strict Transport Security (HSTS)

Nagłówek HSTS wymusza korzystanie z połączenia HTTPS nawet wtedy, gdy użytkownik wpisze adres z http://.

Przykład konfiguracji:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Znaczenie:

  • max-age=31536000 — przeglądarka zapamiętuje regułę przez 1 rok,
  • includeSubDomains — reguła obejmuje także subdomeny,
  • preload — umożliwia dodanie Twojej domeny do listy przeglądarek wymuszających HTTPS (https://hstspreload.org/).

Uwaga:
Włącz HSTS tylko wtedy, gdy Twoja strona w pełni działa przez HTTPS, w przeciwnym razie może się zablokować.


3. X-Frame-Options

Nagłówek X-Frame-Options zabezpiecza stronę przed tzw. clickjackingiem – atakiem, w którym Twoja witryna jest osadzana w niewidocznej ramce innej strony, by nakłonić użytkownika do kliknięcia w złośliwy element.

Przykład konfiguracji:

Header always set X-Frame-Options "SAMEORIGIN"

Dostępne opcje:

  • DENY — całkowicie zabrania osadzania strony w ramkach,
  • SAMEORIGIN — pozwala tylko, jeśli ramka pochodzi z tej samej domeny.

4. Dodatkowe przydatne nagłówki

X-Content-Type-Options

Chroni przed MIME sniffingiem — wymuszając, by przeglądarka respektowała deklarowany typ pliku.

Header set X-Content-Type-Options "nosniff"

Referrer-Policy

Określa, jak dużo informacji o stronie źródłowej jest przekazywane do innych witryn.

Header set Referrer-Policy "strict-origin-when-cross-origin"

Permissions-Policy

Pozwala ograniczyć dostęp do funkcji przeglądarki, takich jak kamera, mikrofon czy geolokalizacja.

Header set Permissions-Policy "camera=(), microphone=(), geolocation=()"

5. Gdzie dodać nagłówki bezpieczeństwa w WordPressie?

Możesz to zrobić na dwa sposoby:

a) W pliku .htaccess (dla serwerów Apache)

Wklej powyższe linie nad regułami WordPressa, czyli nad:

# BEGIN WordPress

b) W pliku functions.php

Można też dodać nagłówki bezpośrednio z poziomu PHP:

function add_security_headers() {
    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=()" );
}
add_action( 'send_headers', 'add_security_headers' );

To dobre rozwiązanie, jeśli nie masz dostępu do konfiguracji serwera.

Podsumowanie

Nagłówki bezpieczeństwa to jeden z najprostszych, a jednocześnie najskuteczniejszych sposobów ochrony WordPressa.
Nie wymagają instalacji żadnych wtyczek – wystarczy kilka linijek w .htaccess lub functions.php.

Stosując CSP, HSTS i X-Frame-Options, ograniczysz ryzyko XSS, clickjackingu i ataków man-in-the-middle, a Twoja witryna stanie się znacznie bardziej odporna na zagrożenia.

KROK 1 Z 4

Z CZYM POTRZEBUJESZ POMOCY?