Generator CSP — polityka bezpieczeństwa treści, z oznaczeniem ostrych krawędzi
Generator CSP
Zaznacz dyrektywy i źródła, a ta strona złoży poprawny jednowierszowy Content-Security-Policy do nagłówka odpowiedzi lub znacznika <meta> — wraz z uwagami, które mają znaczenie: które dyrektywy nigdy nie przechodzą na default-src, kiedy skrót lub nonce po cichu zastępuje unsafe-inline i co wyłącza strict-dynamic. Wbudowany generator skrótów SHA-256/384/512 zamienia skrypty i style inline na źródła 'sha256-…'. Wszystko działa w przeglądarce; nic nie jest wysyłane.
Dyrektywy pobierania — skąd może pochodzić treść
Niezaznaczone dyrektywy po prostu nie pojawiają się w polityce; zaznaczenie bez wybranych źródeł jest ignorowane. 'none' wyłącza pozostałe pola w swoim wierszu. Pole dodatkowych źródeł przyjmuje listę oddzieloną przecinkami: nazwy hostów (cdn.example.com), schematy (https:), skróty i nonce z cudzysłowami lub bez.
dyrektywa
'self'
'none'
'unsafe-inline'
'unsafe-eval'
'strict-dynamic'
data:
blob:
dodatkowe źródła
Dyrektywy dokumentu — co sama strona może robić
Te cztery nie przechodzą na default-src: pominięcie ich oznacza „bez ograniczeń”, więc pełna polityka ustawia je jawnie.
dyrektywa
'self'
'none'
dodatkowe źródła
Przełączniki, nonce i raportowanie
nonce skryptu
report-uri
report-to
Polityka
Nic jeszcze nie zbudowano. Zaznacz kilka źródeł i naciśnij Zbuduj politykę albo wczytaj przykład bazowy OWASP.
Generator skrótów dla skryptów i stylów inline
Wklej dokładną treść między <script> a </script> (lub blok stylu) — bajt po bajcie, bez początkowego ani końcowego znaku nowej linii — i wybierz algorytm. Wynikiem jest źródło 'sha256-…', którego oczekuje CSP 3.
Wynik skrótu pojawi się tutaj.
Wdrażaj jako nagłówek, a nie znacznik meta, gdy tylko to możliwe. Nagłówek odpowiedzi to pełne CSP: frame-ancestors, report-uri i report-to działają tylko tam, a nagłówek jest stosowany, zanim przeglądarka przetworzy pierwszy bajt HTML. Znacznik meta to rozwiązanie awaryjne dla statycznych plików bez konfiguracji serwera. Sprawdź nagłówki, które wysyła witryna, w sprawdzaczu nagłówków bezpieczeństwa, a surowe bloki odpowiedzi rozbierz w parserze nagłówków HTTP.
Autotest Ponownie uruchamia kreator na ustalonych stanach: kolejność źródeł, wzajemne wykluczanie 'none', ciąg bazowy OWASP, cytowanie nonce i skrótów, uwagi o braku przechodzenia dla base-uri / form-action / frame-ancestors, unsafe-inline nadpisywane przez nonce lub skrót, uwagi strict-dynamic, nazwy nagłówków Report-Only, wykluczenia znaczników meta, generator skrótów wobec niezależnie obliczonych wektorów SHA oraz ścieżki negatywne. Nic nigdzie nie jest wysyłane.
Czym jest Polityka bezpieczeństwa treści (CSP)?
W jednym zdaniu: CSP to biała lista, którą serwer wysyła razem ze stroną i która mówi przeglądarce dokładnie, skąd mogą pochodzić skrypty, style, obrazy i połączenia — więc nawet jeśli atakujący wstrzyknie HTML, wstrzyknięty skrypt się nie wczyta, bo jego źródła nie ma na liście.
tak — niezaznaczona dyrektywa dziedziczy z default-src
Dyrektywy dokumentu
base-uri, form-action, frame-ancestors, sandbox
co sama strona może robić (być osadzana, wysyłać formularze, rozwiązywać względne adresy URL)
nie — każdą trzeba ustawić jawnie
Raportowanie i różne
report-uri, report-to, upgrade-insecure-requests
dokąd trafiają raporty o naruszeniach i aktualizacja starych adresów URL
nie (nie są to dyrektywy pobierania)
Najostrzejsze krawędzie, po jednym akapicie każda
'unsafe-inline' a skróty i nonce. Jeśli dyrektywa zawiera nonce lub jakiekolwiek źródło skrótu, CSP 3 mówi, że 'unsafe-inline' jest ignorowane — zostaje tylko dla bardzo starych przeglądarek. Dlatego „dodaliśmy nonce i zostawiliśmy unsafe-inline dla bezpieczeństwa” w praktyce oznacza, że nowoczesne przeglądarki egzekwują nonce. Generator oznacza tę kombinację, aby była to decyzja, a nie przypadek.
strict-dynamic wyłącza listę dozwolonych. Przy strict-dynamic w script-src źródła hostów, schematy, 'self', 'unsafe-inline' i data: są ignorowane dla skryptów; liczą się tylko nonce i skróty, a skrypty, które one wczytują, mogą wczytywać kolejne. To nowoczesny sposób uruchamiania skryptów-loaderów — ale reszta listy script-src staje się ozdobna.
Znaczniki meta są drugiej kategorii.frame-ancestors, report-uri i report-to są ignorowane w <meta http-equiv>. Generator pokazuje, które części polityki po cichu nie będą obowiązywać.
Typowe błędy
Zaczynanie od default-src * plus długiej listy wyjątków. Zrób to odwrotnie: ścisłe default-src 'self', a potem poszerzaj tylko dyrektywy, które tego wymagają. Wąskie polityki zawodzą głośno podczas testów; szerokie zawodzą po cichu na zawsze.
Wdrożenie script-src 'unsafe-inline' 'unsafe-eval' i uznanie sprawy za zamkniętą. Taka polityka blokuje prawie nic z tego, czego chce atak XSS. Dodaj nonce lub skrót do skryptów, dołącz strict-dynamic i utrzymuj report-only w produkcji, by łapać regresje.
Zapominanie, że default-src nie obejmuje wszystkiego.base-uri, form-action, frame-ancestors i sandbox nie mają zastępczego ustawienia — najczęściej cytowana luka we wdrożeniach CSP w praktyce.
Najpierw testowanie w trybie egzekwowania. Uruchom w Report-Only z kolektorem przez tydzień, przeczytaj raporty, a dopiero potem przełącz na egzekwowanie. Polityka, która psuje płatność, jest gorsza niż brak polityki.
Hashowanie białych znaków inaczej. Skrót obejmuje dokładne bajty bloku inline; „pomocny” krok budowania, który przycina końcowe znaki nowej linii, zmienia każdy skrót. Generuj skróty z tego, co faktycznie idzie na produkcję, a nie ze źródeł.
FAQ
Czy potrzebuję default-src, jeśli wypisuję każdą dyrektywę? Nie, ale zachowanie jej jako podłogi to dobra higiena: nowe dyrektywy pobierania w przyszłych przeglądarkach domyślnie trzymają się linii bazowej, a nie „dozwolone”.
Co właściwie robi upgrade-insecure-requests? Każe przeglądarce przepisać każdy adres http://, który strona by wczytała — obrazy, style, pobrania — na https://, zanim zostanie wysłane żądanie. To narzędzie migracji; stanem końcowym są strony bez żadnego adresu http://.
Nonce czy skrót? Nonce, gdy odpowiedź serwera jest kontrolowana (losowa wartość na każdą odpowiedź, zarówno w nagłówku, jak i w każdym znaczniku script). Skrót, gdy HTML jest statyczny lub buforowany. Nigdy statyczny nonce — nonce, który się nie zmienia, to po prostu unsafe-inline z dodatkowymi krokami.
Dlaczego polityka jest dostarczana, ale naruszenia nie docierają? Sprawdź, czy włączony jest tryb Report-Only (tylko raporty), czy report-uri wskazuje na kolektor przyjmujący POST i czy ustawiono też mechanizm Reporting-Endpoints / Report-To, którego wymaga nowoczesna dyrektywa report-to.
Czy CSP zastępuje inne zabezpieczenia? Nie. To jedna warstwa: nadal escapuj wyjście, trzymaj ciasteczka za HttpOnly i Secure, zostaw HSTS. Sprawdzacz nagłówków bezpieczeństwa na tej stronie ocenia cały zestaw.