Jak naprawić brakujący nagłówek Content-Security-Policy (CSP) | Scanthra
Maj 2026Czym jest nagłówek Content-Security-Policy?
CSP to nagłówek odpowiedzi, który mówi przeglądarce dokładnie, z jakich źródeł może ładować skrypty, style, obrazy i ramki. Jeśli coś na stronie spróbuje załadować skrypt z domeny spoza twojej listy dozwolonych, przeglądarka odmówi. To jak lista gości u bramkarza przy wejściu.
Bez CSP każdy wstrzyknięty tag <script> — z zainfekowanej
wtyczki, literówki w widżecie zewnętrznym, zapisanego XSS w komentarzu — działa
z pełnym dostępem do ciasteczek (cookie), danych formularzy i sesji odwiedzających.
Z rygorystycznym CSP to samo wstrzyknięcie jest cicho blokowane i zapisywane w logu.
Dlaczego to ważne dla małej firmy
Dwa rzeczywiste przykłady, które widzimy co tydzień w raportach Scanthra:
- Skimming kart na stronach kasowych — skompromitowana biblioteka JavaScript w sklepie WooCommerce odczytuje numery kart i wysyła je do atakującego. Z CSP to żądanie eksfiltracji do domeny atakującego jest blokowane.
- Przejęcia wizerunku i phishingowe nakładki — wstrzyknięty skrypt zamienia twój formularz kontaktowy na taki, który wysyła wiadomości do atakującego. CSP odmawiałby załadowania nieznanego skryptu w ogóle.
CSP jest też wprost zalecany przez OWASP (standard bezpieczeństwa aplikacji), oczekiwany przez większość kwestionariuszy ubezpieczeń cybernetycznych i — dla firm w UE — rozsądną częścią „odpowiednich środków technicznych" wymaganych przez RODO Artykuł 32 i dyrektywę NIS2 (dyrektywa UE o cyberbezpieczeństwie).
Bezpieczne wdrożenie: najpierw tryb report-only
Główny powód, dla którego małe strony unikają CSP, to strach przed zepsuciem
wyglądu. Rozwiązanie: wdróż najpierw Content-Security-Policy-Report-Only.
Przeglądarka sprawdza politykę i raportuje naruszenia, ale ich
nie egzekwuje. Obserwuj logi przez tydzień, napraw to, co jest blokowane, a potem
przełącz na nagłówek egzekwujący.
Polityka startowa, która działa dla większości stron
Content-Security-Policy-Report-Only:
default-src 'self';
script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
connect-src 'self' https://www.google-analytics.com;
frame-ancestors 'none';
base-uri 'self';
form-action 'self';
upgrade-insecure-requests
Ta polityka zakłada, że serwujesz wszystko z własnej domeny plus Google Analytics i Google Fonts. Niemal każdy WordPress, Shopify lub strona statyczna mieści się tutaj z drobnymi modyfikacjami. Usuń lub zmień linie GA/Fonts, jeśli ich nie używasz.
Jak wdrożyć na nginx
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests" always;
Jak wdrożyć na Apache
Header always set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests"
Jak wdrożyć na Cloudflare
W panelu Cloudflare przejdź do Reguły → Reguły transformacji → Modyfikacja
nagłówków odpowiedzi HTTP. Dodaj nagłówek o nazwie
Content-Security-Policy-Report-Only z powyższą polityką jako
wartością. To najszybsza opcja, jeśli nie masz dostępu do powłoki serwera.
Jak wdrożyć na WordPress
Zainstaluj wtyczkę do nagłówków, np. Headers Security Advanced &
HSTS WP, albo dodaj nagłówki przez panel hostingowy. Unikaj ustawiania CSP
w pliku functions.php motywu — wiele motywów dynamicznie ładuje
zasoby wp-admin lub edytora bloków i to psuje środowisko edytora.
Typowe pułapki
- Skrypty inline. Jeśli twój CMS (system zarządzania treścią) wstrzykuje
tagi
<script>inline, zobaczysz naruszenia. Rozwiązaniem są nonces (najlepsze) lub tymczasowoscript-src 'self' 'unsafe-inline'— ale zaplanuj usunięcie'unsafe-inline'w jednym ze sprintów. - Google Tag Manager. GTM ładuje inne skrypty w czasie wykonywania z zewnętrznych hostów. Albo wstępnie zadeklaruj te hosty w polityce, albo użyj wbudowanych Szablonów Niestandardowych GTM ze strategią nonces.
- Osadzone YouTube / Vimeo. Dodaj
frame-src https://www.youtube.com https://player.vimeo.com. - Endpoint raportowania. Dodaj
report-uri /csp-reportlubreport-to, żeby przechwytywać naruszenia po stronie serwera. Niektórzy dostawcy (Cloudflare, Sentry) oferują darmowe endpointy do raportowania CSP.
Od report-only do egzekwowania
Po tygodniu w trybie report-only bez nowych naruszeń na prawdziwym ruchu zmień
nazwę nagłówka z Content-Security-Policy-Report-Only na
Content-Security-Policy. Polityka jest teraz egzekwowana. Zachowaj
endpoint raportowania — natychmiast wychwycisz nowe naruszenia, gdy aktualizacja
wtyczki wprowadzi nieoczekiwany skrypt.
Jak Scanthra to wykrywa
Nasz moduł Security Headers wykonuje jedno żądanie GET do twojej strony
głównej i odczytuje nagłówki odpowiedzi. Jeśli Content-Security-Policy
jest brakujący, słaby lub zawiera unsafe-eval, dostaniesz
wykrycie z poziomem zagrożenia, przystępnym opisem i gotowym do skopiowania
rozwiązaniem — w tym samym formacie co w tym artykule.
Chcesz wiedzieć, czy twoja strona ma ten problem?
Scanthra przeprowadza przyjazną, pasywną kontrolę i wysyła ci zrozumiały raport PDF na e-mail.
Sprawdź swoją stronę za darmo