Generator nagłówka CSP
Ochrona przed XSS i wstrzykiwaniem skryptów
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator nagłówka Content-Security-Policy
CSP to nagłówek HTTP, który mówi przeglądarce, skąd wolno ładować skrypty, style, obrazy i inne zasoby. Skutecznie ogranicza ataki XSS.
Najważniejsze dyrektywy
| Dyrektywa | Dotyczy |
|---|---|
| default-src | domyślne źródło dla wszystkich typów |
| script-src | skrypty JavaScript |
| style-src | arkusze stylów |
| img-src | obrazy |
| connect-src | żądania fetch, XHR, WebSocket |
| frame-ancestors | kto może osadzać stronę w ramce |
Tryb Report-Only
W trybie raportowania polityka nie blokuje zasobów, a jedynie zgłasza naruszenia. To bezpieczny sposób na wdrożenie CSP bez ryzyka zepsucia strony.
Przykład
Polityka default-src 'self'; script-src 'self'; frame-ancestors 'none' pozwala ładować zasoby tylko z własnej domeny i blokuje osadzanie w iframe.
Jak działa generator nagłówka CSP
Generator nie odpytywuje żadnego serwera i nie analizuje Twojej witryny. Bierze wpisane dyrektywy oraz wartości i składa z nich jeden tekstowy ciąg, który staje się wartością nagłówka HTTP Content-Security-Policy. Przeglądarka dzieli ten ciąg na dyrektywy rozdzielone średnikami, a każdą dyrektywę na nazwę i listę wartości rozdzielonych spacją. Kolejność dyrektyw i kolejność wartości wewnątrz dyrektywy nie ma znaczenia — liczy się zbiór, a nie kolejność zapisu.
Mechanizm dopasowania jest prosty: dla każdego żądania zasobu przeglądarka ustala jego typ i szuka dyrektywy odpowiadającej temu typowi, np. script-src dla skryptów. Jeśli takiej dyrektywy w polityce nie ma, używana jest dyrektywa default-src. Gdy brakuje również jej, żądanie nie jest przez CSP ograniczane. Wartości w dyrektywie tworzą listę dozwolonych źródeł, a dopasowanie obejmuje schemat, host i port — dlatego 'self' nie przepuszcza zasobów z subdomeny.
Narzędzie odwzorowuje dokładnie tę składnię: dyrektywy rozdziela średnik, wartości w dyrektywie pojedyncza spacja, a wartości specjalne zapisuje się w apostrofach, np. 'self' albo 'none'. Generator nie ma żadnych tablic stałych ani gotowych presetów, więc wynik zależy wyłącznie od danych, które wpiszesz. To, czego nie podasz, po prostu nie znajdzie się w nagłówku.
Przykład krok po kroku
- Wybierasz dyrektywy. Zestaw z tabeli powyżej liczy 6 pozycji. Do przykładu bierzesz 5 z nich: default-src, script-src, style-src, img-src oraz frame-ancestors. Pomijasz connect-src, bo w tym wariancie żądania fetch i WebSocket nie mają być ograniczane.
- Ustalasz wartości. Dla default-src, script-src i style-src wpisujesz 'self'. Dla img-src dodajesz drugą wartość data:, żeby przepuścić obrazy wbudowane w dokument. Dla frame-ancestors wpisujesz 'none'.
- Składasz politykę. Powstaje ciąg: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; frame-ancestors 'none'
- Liczysz elementy. Masz 5 dyrektyw rozdzielonych 4 średnikami. Łącznie w polityce jest 6 wartości źródeł: 'self' występuje 4 razy, data: raz i 'none' raz, czyli różnych wartości są 3.
- Mierzysz długość. Sama wartość nagłówka ma 101 znaków. Razem z nazwą nagłówka i dwukropkiem ze spacją (Content-Security-Policy: ) daje to 125 znaków w jednej linii.
- Wdrażasz. Nagłówek trafia do konfiguracji serwera albo do meta http-equiv. Zacznij od trybu Report-Only, przejrzyj raporty i dopiero po wyczyszczeniu naruszeń włącz tryb wymuszający.
Wartości źródeł w dyrektywach — ściągawka
| Wartość | Znaczenie | Kiedy stosować |
|---|---|---|
| 'self' | Zasoby z tego samego schematu, hosta i portu co dokument | Domyślny wybór dla skryptów, stylów i obrazów własnych |
| 'none' | Blokuje wszystko w danej dyrektywie | frame-ancestors przy całkowitym zakazie osadzania |
| * | Dowolne źródło, w tym inne hosty i schematy | Tylko wyjątkowo, gdy nie da się zawęzić listy |
| data: | Zasoby wbudowane bezpośrednio w dokument | img-src i font-src przy grafice inline |
| https://cdn.example.com | Konkretny host po HTTPS | Zewnętrzne biblioteki i pliki statyczne |
| 'unsafe-inline' | Dopuszcza skrypty i style zapisane inline w dokumencie | Ostateczność — wyraźnie osłabia ochronę przed XSS |
| 'nonce-...' | Jednorazowy token przypisany do konkretnego bloku skryptu | Skrypty inline generowane dynamicznie przez serwer |
Jak wdrożyć politykę bez psucia strony
- Zacznij od trybu Report-Only. W tym trybie nic nie jest blokowane, a przeglądarka jedynie zgłasza naruszenia. Najpierw zbierasz raporty, potem przełączasz politykę na tryb wymuszający — dzięki temu nie stracisz ruchu w pierwszej minucie po wdrożeniu.
- Buduj politykę od default-src. Jedna dyrektywa domyślna pokrywa wszystkie typy zasobów, których nie opiszesz osobno. Dopisuj script-src, style-src i img-src tylko tam, gdzie potrzebujesz innej listy źródeł niż domyślna.
- Unikaj 'unsafe-inline'. Ta wartość niweluje większość ochrony przed wstrzyknięciem skryptu. Jeśli musisz dopuścić kod inline, użyj nonce albo skrótu zamiast tej wartości.
- Porównuj politykę z rzeczywistością. Zanim wpiszesz źródła na sztywno, sprawdź w konsoli przeglądarki, z jakich hostów faktycznie ładują się skrypty, style i obrazy. Lista wpisana z pamięci zwykle różni się od stanu faktycznego.
- Nie kopiuj polityki ze środowiska testowego. Dev często używa dodatkowych hostów, źródeł inline i luźniejszych ustawień. Politykę produkcyjną składaj osobno i zawężaj ją stopniowo.
Czego narzędzie nie sprawdzi
- Nie waliduje poprawności polityki. Generator skleja to, co wpiszesz. Literówka w nazwie dyrektywy albo nieznana wartość nie zostanie wychwycona — przeglądarka po prostu zignoruje nieznany element, a polityka będzie słabsza, niż myślisz.
- Nie analizuje Twojej strony. Narzędzie nie wie, z jakich hostów ładujesz skrypty, style czy obrazy, i nie zaproponuje gotowej listy źródeł. Musisz ją ustalić samodzielnie.
- Nie generuje nagłówków raportowania. report-uri i report-to nie są częścią wyniku, podobnie jak konfiguracja punktu zbierania raportów. To trzeba dopisać ręcznie po stronie serwera.
- Nie uwzględnia kontekstu działania. Polityka nie obejmuje Service Workera, ramek zagnieżdżonych ani interakcji z innymi nagłówkami bezpieczeństwa, a narzędzie nie testuje wyniku w żadnej przeglądarce — to nadal Twoja weryfikacja.
Najczęstsze pytania
Czym różni się 'self' od '*'?
'self' oznacza tę samą domenę, a * dowolne źródło. Gwiazdka znosi większość ochrony CSP.
Po co upgrade-insecure-requests?
Wymusza ładowanie zasobów przez HTTPS, nawet jeśli w kodzie podano adresy http://.
Czy CSP zastępuje inne zabezpieczenia?
Nie. To jeden z elementów obrony w głąb — uzupełnia walidację danych, escaping i nagłówki bezpieczeństwa.
Czy CSP można ustawić w meta tagu?
Tak, przez meta http-equiv z nazwą Content-Security-Policy. Ten sposób ma jednak ograniczenia: dyrektywa frame-ancestors jest w tym trybie ignorowana, a raportowanie naruszeń nie działa. Jeśli możesz edytować konfigurację serwera, wybierz nagłówek HTTP.
Czy politykę można bezpiecznie testować trybem Report-Only?
Tak, to najbezpieczniejszy sposób wdrożenia. W trybie raportowania żaden zasób nie jest blokowany, a przeglądarka tylko zgłasza naruszenia. Dopiero gdy raporty staną się puste, warto przełączyć politykę na tryb wymuszający.
Ile dyrektyw powinna mieć polityka CSP?
Nie ma jednej właściwej liczby. Wystarczy default-src plus osobne dyrektywy dla tych typów zasobów, które chcesz ograniczyć inaczej niż domyślnie. Krótsza polityka jest łatwiejsza do utrzymania i rzadziej powoduje przypadkowe blokady.
Dlaczego CSP blokuje moje skrypty z CDN?
Bo hosta tego CDN nie ma na liście dozwolonych źródeł. Wartość 'self' przepuszcza wyłącznie zasoby z tego samego schematu, hosta i portu co dokument. Adres CDN dopisz w script-src.
Czy CSP chroni przed XSS?
Ogranicza go, ale go nie eliminuje. Polityka z 'unsafe-inline' albo miejsce, w którym dane trafiają do już istniejącego skryptu, wciąż zostawiają lukę. CSP jest jedną z warstw obrony, obok walidacji danych i poprawnego kodowania wyjścia.