Content Security Policy dla aplikacji React
Skonfigurują Państwo restrykcyjny nagłówek CSP, który blokuje skrypty inline i nieautoryzowane zasoby zewnętrzne w aplikacjach React.
Content Security Policy dla aplikacji React to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Czym jest Content Security Policy
Content Security Policy (CSP) to nagłówek odpowiedzi HTTP informujący przeglądarkę, które źródła treści są zaufane. Dzięki dokładnemu określeniu, jakie skrypty, style, obrazy i czcionki mogą być ładowane, CSP zapobiega wykonywaniu wstrzykniętej złośliwej treści — nawet jeśli luka XSS pozwala atakującemu wstrzyknąć kod HTML do strony.
default-src i script-src
default-src 'self' ustawia wartość bazową: wszystkie typy zasobów (skrypty, style, obrazy, czcionki i ramki) mogą być ładowane wyłącznie z tego samego originu. script-src 'self' ogranicza ładowanie skryptów do tego samego originu, blokując skrypty z zewnętrznych CDN-ów, chyba że zostaną one jawnie wymienione. Te dwie dyrektywy razem stanowią podstawę restrykcyjnej polityki CSP.
Dlaczego blokowanie eval ma znaczenie
eval() przekształca ciąg znaków w kod wykonywany w czasie działania — dokładnie tego potrzebują payloady XSS. CSP z script-src 'self' (bez 'unsafe-eval') blokuje eval() oraz powiązane funkcje, takie jak new Function() i setTimeout(string). Eliminuje to znaczną klasę sposobów wykonywania payloadów XSS.
strict-dynamic dla łańcuchów skryptów
'strict-dynamic' w script-src nadaje zaufanie skryptom ładowanym przez skrypty, którym już wcześniej zaufano. Umożliwia to wzorce dynamicznego ładowania skryptów używane przez bundlery bez konieczności dodawania do białej listy każdego adresu URL CDN. Zaufany skrypt może ładować kolejne skrypty, a te dziedziczą zaufanie.
CSP oparty na haszach dla skryptów inline
Jeśli aplikacja potrzebuje konkretnego skryptu inline (na przykład fragmentu inicjalizującego analitykę), można obliczyć jego hash SHA-256 i dodać 'sha256-base64hash' do script-src. Wykonywane inline będą tylko skrypty zgodne z dokładnie tym hashem. Każdy skrypt wstrzyknięty przez atakującego będzie miał inny hash i zostanie zablokowany.
CSP oparty na nonce
Nonce to kryptograficznie losowa wartość generowana przez serwer dla każdego żądania. Serwer dodaje nonce zarówno do znacznika skryptu (<script nonce="abc123">), jak i do nagłówka CSP (script-src 'nonce-abc123'). Wykonywane są tylko skrypty zawierające prawidłowy nonce. Atakujący nie mogą przewidzieć nonce, więc wstrzyknięte skrypty nie mogą go użyć.
Raportowanie CSP
CSP obsługuje raportowanie naruszeń za pomocą report-uri /csp-violation-endpoint lub nowszej dyrektywy report-to. Gdy przeglądarka blokuje zasób z powodu CSP, wysyła raport w formacie JSON do wskazanego endpointu. Monitorowanie tych raportów pomaga identyfikować zarówno uzasadnione problemy z konfiguracją, jak i aktywne próby ataku.
Implementacja CSP w Next.js
W Next.js należy dodać nagłówki CSP w middleware: utworzyć middleware.ts, wygenerować nonce, ustawić nagłówek Content-Security-Policy i przekazać nonce do strony za pomocą nagłówka odpowiedzi. Layout strony odczytuje nonce z nagłówka i stosuje go do wszystkich skryptów inline oraz znaczników style.
Testowanie CSP bez blokowania
Content-Security-Policy-Report-Only to tryb testowy: przeglądarka niczego nie egzekwuje, ale wysyła raporty naruszeń dotyczące wszystkiego, co zostałoby zablokowane. Najpierw należy wdrożyć tryb Report-Only i usunąć wszystkie naruszenia, a następnie przełączyć się na egzekwowanie za pomocą nagłówka Content-Security-Policy, aby uniknąć awarii aplikacji.
Naruszenia w konsoli Chrome DevTools
Gdy CSP blokuje zasób, konsola Chrome DevTools wyświetla czerwony komunikat o błędzie, wskazując zablokowany adres URL i naruszoną dyrektywę. Komunikaty te są niezwykle pomocne podczas programowania i testowania. Każde naruszenie należy rozwiązać przez poprawienie polityki, przeniesienie zasobu do dozwolonego źródła albo użycie nonce/hash.
Praktyczne CSP dla React SPA
Praktyczna polityka CSP dla React SPA: default-src 'self'; script-src 'self' 'strict-dynamic' 'nonce-NONCE'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https://api.yourdomain.com; frame-ancestors 'none'. frame-ancestors 'none' zapobiega również clickjackingowi, blokując osadzanie aplikacji w ramkach iframe.
script-src self w CSP
Czego zapobiega script-src 'self' w Content Security Policy?
Podsumowanie lekcji
CSP to nagłówek HTTP określający zaufane źródła treści. default-src 'self' i script-src 'self' blokują zewnętrzne skrypty oraz eval. Skrypty inline są dozwalane za pomocą hashy lub nonce. 'strict-dynamic' obsługuje dynamiczne ładowanie skryptów. Przed włączeniem egzekwowania należy użyć Content-Security-Policy-Report-Only do testów. Next.js implementuje CSP za pomocą middleware. Konsola DevTools pokazuje naruszenia w czasie rzeczywistym.
Często zadawane pytania
Czy lekcja „Content Security Policy dla aplikacji React” jest bezpłatna?
Tak — pełny tekst „Content Security Policy dla aplikacji React” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Content Security Policy dla aplikacji React”?
Skonfigurują Państwo restrykcyjny nagłówek CSP, który blokuje skrypty inline i nieautoryzowane zasoby zewnętrzne w aplikacjach React. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Content Security Policy dla aplikacji React”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- XSS w React: dangerouslySetInnerHTML i skrypty zewnętrzne
- Ochrona przed CSRF w konfiguracjach React i API
- Content Security Policy dla aplikacji React
- Zarządzanie sekretami i zmiennymi środowiskowymi