{"id":15657,"date":"2025-12-08T12:20:52","date_gmt":"2025-12-08T11:20:52","guid":{"rendered":"https:\/\/dhosting.pl\/pomoc\/?post_type=manual_kb&#038;p=15657"},"modified":"2025-12-08T12:20:52","modified_gmt":"2025-12-08T11:20:52","slug":"strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress","status":"publish","type":"manual_kb","link":"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/","title":{"rendered":"Strict CSP &#8211; jak bezpiecznie w\u0142\u0105czy\u0107 Content Security Policy w WordPress"},"content":{"rendered":"<p><!-- Meta description: Czym jest Strict CSP, jak dzia\u0142a i kiedy go u\u017cy\u0107. Instalacja, wp\u0142yw na motywy i wtyczki, najcz\u0119stsze b\u0142\u0119dy oraz dobre praktyki CSP. --><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 ez-toc-wrap-left counter-flat ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Czym_jest_Strict_CSP\" >Czym jest Strict CSP<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Jak_dziala_%E2%80%93_mechanizm_CSP_we_wtyczce\" >Jak dzia\u0142a &#8211; mechanizm CSP we wtyczce<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Wymagania_zgodnosc_i_ograniczenia\" >Wymagania, zgodno\u015b\u0107 i ograniczenia<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Instalacja_i_pierwsza_konfiguracja\" >Instalacja i pierwsza konfiguracja<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Wplyw_na_motywy_i_wtyczki_%E2%80%93_jak_dostosowac_kod\" >Wp\u0142yw na motywy i wtyczki &#8211; jak dostosowa\u0107 kod<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Najczestsze_problemy_i_diagnostyka\" >Najcz\u0119stsze problemy i diagnostyka<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Jak_Strict_CSP_ma_sie_do_ogolnych_porad_dot_CSP\" >Jak Strict CSP ma si\u0119 do og\u00f3lnych porad dot. CSP<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Kiedy_warto_wdrozyc_i_dla_kogo\" >Kiedy warto wdro\u017cy\u0107 i dla kogo<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Procedura_testowa_po_wdrozeniu\" >Procedura testowa po wdro\u017ceniu<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Co_z_panelem_administracyjnym_i_Site_Editorem\" >Co z panelem administracyjnym i Site Editorem<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/dhosting.pl\/pomoc\/baza-wiedzy\/strict-csp-jak-bezpiecznie-wlaczyc-content-security-policy-w-wordpress\/#Dobre_praktyki_przy_CSP_w_WordPress\" >Dobre praktyki przy CSP w WordPress<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Czym_jest_Strict_CSP\"><\/span>Czym jest Strict CSP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Strict CSP to niewielka wtyczka bezpiecze\u0144stwa, kt\u00f3ra wymusza \u015bcis\u0142\u0105 polityk\u0119 Content Security Policy na froncie i ekranie logowania WordPress. Jej celem jest ograniczenie ryzyka XSS poprzez kontrol\u0119 tego, sk\u0105d przegl\u0105darka mo\u017ce wczytywa\u0107 i uruchamia\u0107 zasoby. W praktyce Strict CSP dodaje nag\u0142\u00f3wki i atrybuty nonce tak, aby skrypty \u0142adowane zgodnie z API WordPress dzia\u0142a\u0142y, a wstrzykiwane lub niepoprawnie dodane skrypty by\u0142y blokowane. Aktualnie polityka nie obejmuje panelu administracyjnego, co wynika z ogranicze\u0144 po stronie Core i aktywnych prac nad tym obszarem.<\/p>\n<div id=\"dhost-3581825636\" class=\"dhost-inpost dhost-entity-placement\"><a href=\"https:\/\/dhosting.pl\/opieka-stron.html?utm_source=pomoc&utm_medium=artykul&utm_campaign=pomoc\" target=\"_blank\">\r\n\t<img decoding=\"async\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2025\/01\/baner-opieka.png\" alt=\"opieka stron www\">\r\n<\/a>\r\n<br \/>\r\n<br \/><\/div><h2><span class=\"ez-toc-section\" id=\"Jak_dziala_%E2%80%93_mechanizm_CSP_we_wtyczce\"><\/span>Jak dzia\u0142a &#8211; mechanizm CSP we wtyczce<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wtyczka egzekwuje tzw. strict CSP na dw\u00f3ch obszarach: stronie publicznej i formularzu logowania. Dodaje atrybuty nonce do skrypt\u00f3w generowanych przez WordPress i zapewnia, \u017ce osadzenia zewn\u0119trzne, takie jak tweety, r\u00f3wnie\u017c otrzymaj\u0105 odpowiedni nonce. Dzi\u0119ki temu mo\u017cliwe jest zablokowanie wykonywania nieautoryzowanych skrypt\u00f3w, w tym inline oraz tych dodanych atrybutami zdarze\u0144 typu onclick czy onload. W konsoli przegl\u0105darki u\u017cytkownik zobaczy czytelny komunikat o odmowie wykonania skryptu naruszaj\u0105cego polityk\u0119.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Wymagania_zgodnosc_i_ograniczenia\"><\/span>Wymagania, zgodno\u015b\u0107 i ograniczenia<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Strict CSP dzia\u0142a z WordPress 6.4 i nowszym, zosta\u0142 przetestowany do 6.9 i wymaga PHP co najmniej 7.2. Z pe\u0142n\u0105 premedytacj\u0105 wy\u0142\u0105czono dzia\u0142anie w Edytorze Witryny i w panelu WP-Admin, poniewa\u017c tam nadal istniej\u0105 miejsca, w kt\u00f3rych Core lub rozszerzenia opieraj\u0105 si\u0119 na inline script i konstrukcji znacznik\u00f3w poza standardowym API. To celowy kompromis &#8211; w pierwszej kolejno\u015bci chroniony jest frontend i logowanie, czyli obszary bezpo\u015brednio nara\u017cone na XSS wobec u\u017cytkownik\u00f3w ko\u0144cowych.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Instalacja_i_pierwsza_konfiguracja\"><\/span>Instalacja i pierwsza konfiguracja<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Instalacja przebiega jak zwykle: dodaj wtyczk\u0119 z katalogu i aktywuj. Po w\u0142\u0105czeniu zalecane jest wylogowanie i ponowne logowanie z zaznaczon\u0105 opcj\u0105 zapami\u0119tania, aby poprawnie zainicjowa\u0107 przep\u0142yw nonce. Nie ma tu rozbudowanych ustawie\u0144 &#8211; wtyczka dzia\u0142a po aktywacji i opiera si\u0119 na standardowych mechanizmach WordPress. Je\u017celi wolisz instalacj\u0119 r\u0119czn\u0105, dost\u0119pna jest paczka ZIP oraz repozytorium projektu.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Wplyw_na_motywy_i_wtyczki_%E2%80%93_jak_dostosowac_kod\"><\/span>Wp\u0142yw na motywy i wtyczki &#8211; jak dostosowa\u0107 kod<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kluczowa zmiana mentalna: przestajemy r\u0119cznie drukowa\u0107 znaczniki <code class=\"\" data-line=\"\">script<\/code> i przestajemy polega\u0107 na atrybutach zdarze\u0144 w HTML. Strict CSP wymaga, aby wszystkie skrypty trafia\u0142y na stron\u0119 przez oficjalne API &#8211; <code class=\"\" data-line=\"\">wp_enqueue_script<\/code>, <code class=\"\" data-line=\"\">wp_add_inline_script<\/code>, <code class=\"\" data-line=\"\">wp_localize_script<\/code>, <code class=\"\" data-line=\"\">wp_print_script_tag<\/code>, <code class=\"\" data-line=\"\">wp_print_inline_script_tag<\/code> lub <code class=\"\" data-line=\"\">wp_enqueue_script_module<\/code>. To pozwala WordPress doda\u0107 <em>nonce<\/em> i spe\u0142ni\u0107 warunki polityki. Je\u017celi motyw lub wtyczka wci\u0105\u017c echo-uje surowe tagi <code class=\"\" data-line=\"\">script<\/code> albo u\u017cywa <code class=\"\" data-line=\"\">onclick<\/code> w HTML, przegl\u0105darka je zablokuje. W takim przypadku poprawiamy kod, przenosz\u0105c logik\u0119 do plik\u00f3w JS lub do inline script dodawanego funkcj\u0105 WordPress, zamiast w HTML.<\/p>\n<p>Cz\u0119\u015b\u0107 starszych motyw\u00f3w &#8211; \u0142\u0105cznie z niekt\u00f3rymi motywami domy\u015blnymi &#8211; bywa podatna na opisane antywzorce. Przyk\u0142adowy fix to zamiana <code class=\"\" data-line=\"\">echo &#039;&lt;script&gt;...&lt;\/script&gt;&#039;<\/code> na <code class=\"\" data-line=\"\">wp_print_inline_script_tag(&#039;...&#039;)<\/code>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Najczestsze_problemy_i_diagnostyka\"><\/span>Najcz\u0119stsze problemy i diagnostyka<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Po aktywacji przestaje dzia\u0142a\u0107 jaka\u015b interakcja &#8211; sprawd\u017a konsol\u0119 przegl\u0105darki. Zwykle winne s\u0105 inline script bez nonce lub atrybuty zdarze\u0144.<\/li>\n<li>Osadzenia zewn\u0119trzne &#8211; upewnij si\u0119, \u017ce trafiaj\u0105 na stron\u0119 przez mechanizmy WordPress i otrzymuj\u0105 nonce.<\/li>\n<li>Wtyczki legacy &#8211; zidentyfikuj miejsca, w kt\u00f3rych drukuj\u0105 tagi <code class=\"\" data-line=\"\">script<\/code>, i przenie\u015b je na API enqueuowania.<\/li>\n<\/ul>\n<p>Naprawa polega na przej\u015bciu na API WordPress i na eliminacji atrybut\u00f3w zdarze\u0144 w HTML. W rzadkich przypadkach konieczna jest aktualizacja sposobu integracji z us\u0142ug\u0105 zewn\u0119trzn\u0105.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Jak_Strict_CSP_ma_sie_do_ogolnych_porad_dot_CSP\"><\/span>Jak Strict CSP ma si\u0119 do og\u00f3lnych porad dot. CSP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wprowadzenie CSP w WordPress bywa trudne tam, gdzie powszechne s\u0105 inline script i style. Dopuszczenie <code class=\"\" data-line=\"\">unsafe-inline<\/code> u\u0142atwia start, ale znacz\u0105co os\u0142abia ochron\u0119. \u015acis\u0142a polityka oparta o nonce i hashe jest bezpieczniejsza, lecz wymusza porz\u0105dek w kodzie i zgodno\u015b\u0107 z API. Strict CSP pomaga zbli\u017cy\u0107 si\u0119 do tego stanu bez r\u0119cznej konfiguracji nag\u0142\u00f3wk\u00f3w i wyj\u0105tk\u00f3w, bo integruje si\u0119 z kolejk\u0105 skrypt\u00f3w WordPress.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Kiedy_warto_wdrozyc_i_dla_kogo\"><\/span>Kiedy warto wdro\u017cy\u0107 i dla kogo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Serwisy, kt\u00f3re chc\u0105 realnie zredukowa\u0107 ryzyko XSS na froncie i przy logowaniu.<\/li>\n<li>Zespo\u0142y maj\u0105ce kontrol\u0119 nad motywem i kluczowymi wtyczkami &#8211; gotowe do drobnych refaktoryzacji pod CSP.<\/li>\n<li>Witryny podlegaj\u0105ce audytom bezpiecze\u0144stwa, gdzie wymagany jest \u015bcis\u0142y CSP i konsekwentne enqueuowanie zasob\u00f3w.<\/li>\n<\/ul>\n<p>W projektach legacy zacznij od sekcji publicznych o najwi\u0119kszym ruchu, testuj i sukcesywnie eliminuj inline script oraz atrybuty zdarze\u0144.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Procedura_testowa_po_wdrozeniu\"><\/span>Procedura testowa po wdro\u017ceniu<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>Uruchom wtyczk\u0119 na \u015brodowisku testowym.<\/li>\n<li>Przejd\u017a krytyczne \u015bcie\u017cki u\u017cytkownika i obserwuj konsol\u0119 przegl\u0105darki.<\/li>\n<li>Mapuj b\u0142\u0119dy CSP do miejsc w kodzie i przeno\u015b logik\u0119 do API enqueuowania.<\/li>\n<li>Zweryfikuj osadzenia zewn\u0119trzne i wprowad\u017a ewentualne poprawki.<\/li>\n<li>Sprawd\u017a wska\u017aniki wydajno\u015bci &#8211; poprawnie ustawione CSP nie powinno pogarsza\u0107 CWV.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Co_z_panelem_administracyjnym_i_Site_Editorem\"><\/span>Co z panelem administracyjnym i Site Editorem<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Na dzi\u015b wtyczka nie stosuje CSP w panelu administracyjnym i w Edytorze Witryny. To \u015bwiadoma decyzja &#8211; te obszary korzystaj\u0105 z innych \u015bcie\u017cek \u0142adowania i licznych inline script. Ochron\u0119 frontu i logowania mo\u017cesz wzmocni\u0107 ju\u017c teraz, a kwestie zaplecza b\u0119d\u0105 ewoluowa\u0107 wraz z rozwojem WordPress.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Dobre_praktyki_przy_CSP_w_WordPress\"><\/span>Dobre praktyki przy CSP w WordPress<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Zawsze dodawaj JS przez API WordPress &#8211; nigdy przez r\u0119czne tagi <code class=\"\" data-line=\"\">script<\/code>.<\/li>\n<li>Unikaj atrybut\u00f3w <code class=\"\" data-line=\"\">onclick<\/code>, <code class=\"\" data-line=\"\">onsubmit<\/code> i podobnych &#8211; u\u017cywaj <code class=\"\" data-line=\"\">addEventListener<\/code>.<\/li>\n<li>Inline script traktuj jako wyj\u0105tek i dodawaj przez <code class=\"\" data-line=\"\">wp_add_inline_script<\/code> lub <code class=\"\" data-line=\"\">wp_print_inline_script_tag<\/code>, aby otrzyma\u0142y nonce.<\/li>\n<li>Przegl\u0105daj motyw i wtyczki pod k\u0105tem twardo wstawionych skrypt\u00f3w.<\/li>\n<li>Testuj integracje zewn\u0119trzne i osadzenia &#8211; sprawd\u017a kompatybilno\u015b\u0107 z nonce.<\/li>\n<li>Edukuj zesp\u00f3\u0142 &#8211; CSP to polityka, kt\u00f3ra wymusza dobre nawyki, a nie \u201emagiczny firewall\u201d.<\/li>\n<\/ul>\n","protected":false},"author":6,"featured_media":10957,"parent":0,"menu_order":0,"template":"","format":"standard","manualknowledgebasecat":[118,5649],"manual_kb_tag":[1716,6707,3015,6711,6710,6708,6706,6709,572,4022],"class_list":["post-15657","manual_kb","type-manual_kb","status-publish","format-standard","has-post-thumbnail","hentry","manualknowledgebasecat-pozostale","manualknowledgebasecat-wtyczki-wordpress","manual_kb_tag-bezpieczenstwo-wordpress","manual_kb_tag-content-security-policy","manual_kb_tag-frontend","manual_kb_tag-inline-script","manual_kb_tag-login","manual_kb_tag-nonce","manual_kb_tag-strict-csp","manual_kb_tag-wp_enqueue_script","manual_kb_tag-wtyczka-wordpress","manual_kb_tag-xss"],"_links":{"self":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/manual_kb\/15657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/manual_kb"}],"about":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/types\/manual_kb"}],"author":[{"embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/users\/6"}],"version-history":[{"count":1,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/manual_kb\/15657\/revisions"}],"predecessor-version":[{"id":15658,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/manual_kb\/15657\/revisions\/15658"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/media\/10957"}],"wp:attachment":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/media?parent=15657"}],"wp:term":[{"taxonomy":"manualknowledgebasecat","embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/manualknowledgebasecat?post=15657"},{"taxonomy":"manual_kb_tag","embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/manual_kb_tag?post=15657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}