Kluczowe dyrektywy
- default-src: wartość zastępcza dla dyrektyw pobierania zasobów; nie obejmuje m.in. frame-ancestors, base-uri ani form-action.
- script-src / style-src: źródła skryptów i stylów; nowoczesne polityki używają nonce lub hashy zamiast list domen.
- frame-ancestors: kto może osadzić stronę w iframe (ochrona przed clickjackingiem).
- report-to / report-uri: raportowanie naruszeń polityki do wskazanego endpointu.
Jak wdrażać bezpiecznie
Zacznij od trybu Content-Security-Policy-Report-Only, który tylko raportuje naruszenia bez blokowania, przeanalizuj raporty i dopiero potem egzekwuj politykę. Unikaj 'unsafe-inline' i szerokich whitelist. Rekomendowany kierunek to strict CSP oparty na nonce z 'strict-dynamic'.
Przykład
Przykład wymaga rzeczywistego odbiornika raportów pod podanym adresem. NONCE_BASE64 zastąp świeżą, kryptograficznie losową wartością dla każdej odpowiedzi; tę samą wartość wpisz do nagłówka i dozwolonego skryptu. Nie kopiuj stałego nonce do produkcji.
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'nonce-NONCE_BASE64' 'strict-dynamic'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'; report-to csp-endpoint<script nonce="NONCE_BASE64" src="/app.js"></script>Test przed egzekwowaniem
Na środowisku testowym dodaj skrypt bez nonce i sprawdź komunikat naruszenia oraz odbiór raportu. W Report-Only skrypt nadal może działać. Po przejściu na Content-Security-Policy powinien zostać zablokowany; sprawdź też formularze, logowanie, płatności i zasoby zewnętrzne. Raporty mogą zawierać URL-e: ogranicz ich dane, dostęp i czas przechowywania.
CSP określa dozwolone źródła i zasady przetwarzania zasobów. Nagłówek Content-Security-Policy egzekwuje politykę; wariant Report-Only zgłasza naruszenia bez blokowania.
CSP ogranicza skutki części ataków XSS i pomaga chronić przed nieautoryzowanym ładowaniem zasobów oraz clickjackingiem. Nie zastępuje bezpiecznego kodu, kontroli dostępu ani testów bezpieczeństwa.
Najpierw uruchom Content-Security-Policy-Report-Only, przeanalizuj naruszenia i dopiero potem egzekwuj politykę. Ograniczaj źródła, unikaj szerokich wildcardów i preferuj nonce lub hashe zamiast unsafe-inline.
Sprawdź nagłówek Content-Security-Policy w odpowiedzi HTTP, naruszenia w konsoli przeglądarki i raporty Report-Only. Następnie zweryfikuj zakres źródeł oraz wyjątków; automatyczny audyt wskazuje sygnały, ale nie potwierdza pełnego bezpieczeństwa aplikacji.
Źródła i dalsza lektura
- MDN: Content Security Policy (CSP) dokumentacja
- W3C: Content Security Policy Level 3 standard
- OWASP: CSP Cheat Sheet dokumentacja
- MDN: CSP report-to dokumentacja