Defaults.Exposed

Defaults.ExposedNaprawy › Content-Security-Policy (CSP)

Jak naprawić Content-Security-Policy (CSP)

Polityka bezpieczeństwa treści (Content Security Policy) to reguła bezpieczeństwa, którą Twoja strona wręcza przeglądarce każdego odwiedzającego, mówiąc jej dokładnie, który kod wolno uruchomić. Bez niej, jeśli na stronę kiedykolwiek trafi coś złośliwego — przez pole komentarza, zhakowaną wtyczkę czy zewnętrzny skrypt — przeglądarka uruchomi to swobodnie, w tym kod po cichu zbierający numery kart i hasła Twoich klientów w trakcie wpisywania, z wciąż widoczną kłódką.

W skrócie dla Twojej firmy: Jeśli Twoja strona kiedykolwiek zostanie zmanipulowana, złośliwy kod może odczytać dane kart płatniczych i logowań Twoich klientów wprost z Twojego własnego koszyka, podczas gdy wszystko wygląda zupełnie normalnie — zostawiając Cię z obciążeniami zwrotnymi, roszczeniami z oszustw, naruszeniem danych podlegającym zgłoszeniu i niezaliczeniem kontroli, którego działy bezpieczeństwa większych klientów używają, by wstrzymać lub zabić transakcję.

Ile może Cię to kosztować

Dlaczego to ma znaczenie. Kłódka dowodzi, że połączenie z Twoją stroną jest prywatne, ale nic nie robi, by kontrolować, jaki kod uruchamia się, gdy odwiedzający już jest na stronie. Polityka bezpieczeństwa treści to zabezpieczenie, które to robi — każe przeglądarkom ignorować każdy skrypt, który nie pochodzi ze źródła, któremu ufasz, by pojedyncze zmanipulowane pole, reklama czy wtyczka nie mogły zostać zamienione w narzędzie do kradzieży pieniędzy i danych Twoich klientów. To oceniana kontrola na Twojej karcie wyników, warta realnych punktów, i jedna z pierwszych rzeczy, których szuka profesjonalna kontrola bezpieczeństwa.

Czym to jest, prostymi słowami

Gdy ktoś odwiedza Twoją stronę, jego przeglądarka pobiera Twoją stronę i uruchamia jakikolwiek kod na niej jest — skrypty, które rozwijają menu, sprawiają, że przyciski działają, formularze płatności się wysyłają itd. Domyślnie przeglądarka ufa temu wszystkiemu. Nie ma jak wiedzieć, który kod jest naprawdę Twój, a który przemycił ktoś inny.

Polityka bezpieczeństwa treści (często skracana do CSP) to krótka lista reguł, którą Twoja strona dołącza do każdej strony, mówiąc przeglądarce: „uruchamiaj tylko kod ze źródeł, które zatwierdziłem, a wszystko inne odmów”. To różnica między klubem nocnym, który wpuszcza każdego, a takim z listą gości przy drzwiach.

Powodem, dla którego to tak ważne, jest to, że strony są manipulowane bez przerwy — nie zawsze przez zhakowanie Twojego serwera, ale przez tylne furtki, które większość stron zostawia otwarte: pole komentarza, pole wyszukiwania, przestarzała wtyczka, zewnętrzny skrypt do reklam lub analityki albo widżet czatu. Jeśli atakujący wprowadzi choć jedną linię własnego kodu na jedną z Twoich stron, przeglądarka uruchomi ją, jakby była Twoja. Stamtąd może odczytać wszystko, co wpisują Twoi klienci — numery kart, hasła, adresy — i po cichu wysłać to gdzie indziej. Polityka bezpieczeństwa treści zatrzaskuje te drzwi, odmawiając uruchomienia czegokolwiek ze źródła, którego nie zatwierdziłeś.

Ile może Cię to kosztować

To nie abstrakcja. Atak, któremu polityka bezpieczeństwa treści zapobiega — kod wstrzyknięty na stronę, który kradnie dane od Twoich własnych klientów — stoi za niektórymi z największych odnotowanych naruszeń z podbieraniem kart. Oto jak zwykle rozgrywa się to dla normalnej firmy:

Czym to właściwie jest (szczegóły)

Polityka bezpieczeństwa treści jest dostarczana jako pojedynczy nagłówek odpowiedzi HTTP — linia, którą Twój serwer WWW wysyła z każdą stroną. Jej wartość to zestaw dyrektyw, każda nazywająca typ treści i dozwolone dla niej źródła. Na przykład:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

W prostych słowach mówi to: domyślnie wczytuj rzeczy tylko z mojej własnej strony; uruchamiaj skrypty tylko z mojej własnej strony; nie dopuszczaj starych wtyczek; i nie pozwól innym stronom osadzać mojej w ramce.

Jak wygląda „dobrze”. Nasza kontrola nie szuka tylko obecności nagłówka — czyta politykę dyrektywa po dyrektywie i ocenia, jak silna faktycznie jest, tak jak zrobiłby recenzent bezpieczeństwa. Silna polityka:

Polityka, która istnieje, ale opiera się na 'unsafe-inline', 'unsafe-eval' lub wieloznacznikach, wciąż wypadnie słabo — bo w praktyce daje niewiele realnej ochrony. Celem jest ścisła polityka, a nie byle jaka.

Jak to naprawić (za darmo, ~1–2 godziny)

Przekaż to swojemu informatykowi lub osobie prowadzącej Twoją stronę — sama naprawa jest całkowicie darmowa. My pobieramy opłatę jedynie za monitorowanie, że pozostaje na miejscu i poprawna w czasie; włączenie nic nie kosztuje. Powodem, dla którego zajmuje to godzinę czy dwie, a nie minuty, jest ostrożny krok próbny, który zapobiega przypadkowemu zablokowaniu części Twojej własnej strony.

  1. Zacznij w trybie report-only — jeszcze nie egzekwuj. Dodaj nagłówek odpowiedzi Content-Security-Policy-Report-Only. To obserwuje i loguje, co zostałoby zablokowane, faktycznie niczego nie blokując, więc żywa strona wciąż działa, podczas gdy uczysz się, od czego każda strona naprawdę zależy. (Ważne: report-only sam w sobie nie daje odwiedzającym ochrony — to tylko bezpieczny pierwszy krok.)

  2. Zbuduj politykę z tego, czego strona faktycznie używa. Przejrzyj raporty, by znaleźć każde prawowite źródło skryptów, stylów, czcionek i obrazów — Twoją własną domenę, Twoją analitykę, Twojego dostawcę płatności, host czcionek, widżet czatu — i wypisz je jako dozwolone źródła. Solidny punkt wyjścia to default-src 'self' plus jawne wpisy dla zaufanych stron zewnętrznych, których naprawdę używasz.

  3. Unikaj furtek, które niweczą cały sens. Trzymaj się z daleka od 'unsafe-inline' i 'unsafe-eval' dla skryptów i unikaj wieloznacznych źródeł jak * oraz gołych schematów jak https: dla skryptów — te ponownie otwierają dokładnie tę lukę, którą polityka ma zamknąć. Tam, gdzie skrypty wbudowane są nieuniknione, użyj nonce lub hasza, by uruchomił się tylko Twój konkretny zatwierdzony kod.

  4. Zarygluj osadzanie i wtyczki. Dodaj frame-ancestors 'self' (to też powstrzymuje inne strony przed osadzaniem Twojej, by oszukać klientów, i spełnia powiązaną kontrolę clickjackingu) oraz object-src 'none', by zablokować ataki oparte na starszych wtyczkach.

  5. Przełącz z report-only na egzekwujący. Gdy raporty są czyste, a strona działa, zmień nazwę nagłówka z Content-Security-Policy-Report-Only na Content-Security-Policy. To krok, który faktycznie dostarcza ochronę — sama polityka report-only jej nie daje i nie przejdzie kontroli.

    Gdzie ustawiasz nagłówek, zależy od Twojej platformy:

    • Cloudflare: Rules → Transform Rules → Modify Response Header → ustaw Content-Security-Policy. (Możesz użyć Cloudflare także do próby report-only.)
    • Nginx: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache: Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
    • IIS (web.config): dodaj niestandardowy nagłówek odpowiedzi HTTP o nazwie Content-Security-Policy z polityką jako wartością.
    • Google Workspace / Microsoft 365: te prowadzą Twoją pocztę, nie publiczną stronę, więc polityka jest ustawiana tam, gdzie strona jest faktycznie hostowana (Cloudflare lub Twój host WWW powyżej), a nie w panelu administracyjnym poczty.
  6. Sprawdź ponownie swoją domenę, by potwierdzić, że polityka pokazuje się teraz jako włączona i egzekwująca, bez osłabiających furtek.

Częste błędy

Najczęstsze pytania

Nie znam się na technice — czy poradzę sobie z tym sam?

Nie musisz rozumieć szczegółów. To ustawienie dodawane przez osobę prowadzącą Twoją stronę lub hosting, a na usługach jak Cloudflare jest w dużej mierze prowadzone krok po kroku. Przekaż im sekcję «Jak to naprawić» poniżej. Jest darmowe; jedyna ostrożność to wdrożyć je ostrożnie, najpierw w trybie próbnym tylko-do-obserwacji, by przypadkiem nie zablokować części Twojej własnej strony — co dokładnie obejmują kroki.

Mam już kłódkę i certyfikat SSL — czy moja strona nie jest bezpieczna?

Kłódka zabezpiecza dostarczanie Twojej strony; nie pilnuje, co uruchamia się w środku. Jeśli złośliwy kod kiedykolwiek trafi na stronę — przez zhakowaną wtyczkę, przejętą reklamę czy wstrzyknięte pole — kłódka nie powstrzyma go przed kradzieżą danych. Polityka bezpieczeństwa treści to warstwa, która ogranicza, co w ogóle wolno uruchomić. Chronią różne rzeczy i chcesz obu.

Czy włączenie tego może zepsuć moją stronę?

Może, jeśli zostanie włączone agresywnie naraz, bo może zablokować prawowite skrypty, których faktycznie używasz. Dlatego standardowe podejście to zacząć w trybie próbnym «tylko raportowanie» (report-only), który obserwuje bez blokowania, naprawić cokolwiek oznaczy, a dopiero potem to egzekwować. Wykonane tak jest bezpieczne — a krok próbny jest wbudowany w naprawę poniżej.

Umieściliśmy to już w trybie «report-only» — czy jesteśmy zabezpieczeni?

Nie, i to najczęstsze fałszywe poczucie bezpieczeństwa. Tryb report-only obserwuje i loguje, co zostałoby zablokowane, ale nie blokuje niczego — odwiedzający dostają zerową realną ochronę. To tylko bezpieczny pierwszy krok. Nasza kontrola daje report-only drobny ułamek kredytu prawdziwej polityki i nie zapisze tego jako zaliczenia. Jesteś chroniony dopiero, gdy przełączysz na tryb egzekwujący.

Czy to wpływa na naszą ocenę, czy jest tylko doradcze?

Wpływa na Twoją ocenę. Kontrola polityki bezpieczeństwa treści jest oceniana i warta do 25 punktów w kategorii Bezpieczeństwo sieciowe. Brakująca lub słaba polityka jest oznaczana jako wysoka waga i ściąga Twoją ocenę w dół — i to dokładnie rodzaj luki, o który pyta kwestionariusz bezpieczeństwa klienta.

Nasz deweloper dodał politykę, ale ocena wciąż jest niska — dlaczego?

Polityka może istnieć, a wciąż być słaba. Najczęstsi winowajcy to furtki jak «unsafe-inline» i «unsafe-eval» dla skryptów albo wieloznaczne źródła (gołe *), które ponownie otwierają dokładnie tę lukę, którą polityka ma zamknąć. Nasza kontrola czyta politykę dyrektywa po dyrektywie i obniża za te słabości — polityka, która dopuszcza cokolwiek, punktuje niewiele lepiej niż jej brak. Naprawa to zaostrzenie reguł skryptów przy użyciu wartości nonce lub haszy zamiast tych furtek.