Content Security Policy (CSP) – mechanizm bezpieczeństwa przeglądarek internetowych, za pomocą którego serwis internetowy przekazuje przeglądarce instrukcje ograniczające działania kodu tworzącego jego strony. Podstawowym zastosowaniem CSP jest określanie, jakie zasoby – zwłaszcza skrypty JavaScript – może wczytać dokument, co stanowi dodatkową ochronę przed atakami cross-site scripting (XSS). CSP służy też m.in. do ochrony przed clickjackingiem. Standard rozwija konsorcjum W3C.
Politykę przekazuje się w nagłówku odpowiedzi HTTP Content-Security-Policy, a w ograniczonym zakresie także w znaczniku meta dokumentu HTML. Składa się ona z oddzielonych średnikami dyrektyw, z których każda dotyczy innego aspektu zabezpieczeń. Przykładowa polityka default-src 'self'; img-src 'self' example.com pozwala wczytywać zasoby wyłącznie z tego samego pochodzenia co dokument, a obrazy dodatkowo z domeny example.com. Dyrektywy script-src, style-src i img-src określają dozwolone źródła odpowiednio skryptów, arkuszy stylów i obrazów, a default-src stosuje się do zasobów, dla których nie podano osobnej dyrektywy.
Jeżeli polityka zawiera dyrektywę default-src lub script-src, przeglądarka blokuje skrypty zapisane bezpośrednio w dokumencie, obsługę zdarzeń w atrybutach elementów, adresy javascript: oraz funkcję eval() i podobne. Ograniczenia te można znieść słowami kluczowymi 'unsafe-inline' i 'unsafe-eval', co jednak w dużej mierze niweczy sens stosowania CSP. Zamiast tego poszczególne skrypty dopuszcza się za pomocą losowej wartości (ang. nonce) generowanej przy każdej odpowiedzi serwera albo skrótu kryptograficznego ich treści. Polityki oparte na tych mechanizmach (ang. strict CSP) są zalecane zamiast list dozwolonych domen, które trudno poprawnie skonfigurować i które często nieświadomie dopuszczają niebezpieczne źródła.
Dyrektywa frame-ancestors określa, które strony mogą osadzać dokument w ramce, i chroni w ten sposób przed clickjackingiem. Jest bardziej elastycznym następcą nagłówka X-Frame-Options. Dyrektywa upgrade-insecure-requests nakazuje przeglądarce zamieniać na HTTPS adresy HTTP zasobów wczytywanych przez stronę.
Politykę można wdrożyć w trybie raportowania, przekazując ją w nagłówku Content-Security-Policy-Report-Only. Przeglądarka nie blokuje wtedy zasobów, lecz wysyła raporty o naruszeniach pod adres wskazany w polityce, co pozwala sprawdzić jej działanie przed wdrożeniem. CSP nie zastępuje filtrowania danych wejściowych, lecz stanowi dodatkową warstwę ochrony na wypadek, gdyby ono zawiodło.
Pierwszą wersję roboczą specyfikacji CSP 1.0 W3C opublikowało 29 listopada 2011 roku, a w listopadzie 2012 roku uzyskała ona status rekomendacji kandydującej. W 2015 roku specyfikację tę wycofano. Wersja CSP Level 2 została rekomendacją W3C 15 grudnia 2016 roku. Prace nad CSP Level 3 trwają od stycznia 2016 roku, a specyfikacja ta ma nadal status wersji roboczej, której ostatnie wydanie opublikowano 16 września 2026 roku.