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.