Utilia

Generator Content Security Policy (CSP)

Creează antetul Content-Security-Policy, eticheta meta și varianta Report-Only cu șabloane, nonce și hash SHA-256, apoi analizează o politică existentă.

Pornește de la un șablon

Gazdele Google sunt exemple preluate din ghidul CSP al Google pentru eticheta Google. Google le modifică din când în când: verifică documentația actuală și șterge ce nu folosești.

Directive

Surse separate prin spațiu. Lasă un câmp gol pentru a omite directiva (directivele de tip fetch revin atunci la default-src).

Adăugare rapidă

Un nonce trebuie să fie o valoare aleatorie nouă la fiecare răspuns, generată de serverul tău și repetată în fiecare <script nonce="…">. Un nonce fix nu protejează nimic.

Calculează hash pentru un script sau stil inline

Hash-ul acoperă exact textul dintre etichete, inclusiv spațiile și rândurile noi: orice modificare cere un hash nou. Handlerele de evenimente inline (onclick=…) au nevoie și de 'unsafe-hashes'.

Rapoarte de încălcări

Adaugă report-uri (browsere mai vechi) și report-to cu un antet Reporting-Endpoints.

Într-o etichetă <meta>, browserele ignoră frame-ancestors, report-uri, report-to și sandbox, iar Report-Only nu este acceptat. Pune eticheta la începutul lui <head>: se aplică doar conținutului care vine după ea.

Analiza acestei politici

Evaluează o politică existentă

Cum creezi o politică

  1. Alege un punct de plecare la Pornește de la un șablon: Strict (nonce + strict-dynamic), Site static blocat la maximum, Site obișnuit sau Obișnuit + Google Analytics / Ads. Editorul se deschide cu șablonul pentru site obișnuit.
  2. Ajustează Directive. Fiecare câmp primește surse separate prin spațiu; un câmp gol omite directiva.
  3. Folosește Adăugare rapidă pentru a adăuga un cuvânt-cheie la Directivă aleasă: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Adaugă un nonce inserează un nonce aleatoriu pe 128 de biți.
  4. Ca să permiți un anumit script inline fără 'unsafe-inline', lipește-l (sau HTML-ul din jurul lui) la Calculează hash pentru un script sau stil inline și apasă Calculează SHA-256 și adaugă.
  5. Bifează upgrade-insecure-requests dacă unele URL-uri vechi folosesc încă http://, și, dacă vrei, introdu un URL-ul endpoint-ului de raportare (opțional).
  6. Copiază Antet HTTP, Antet Report-Only (testare fără blocare) sau Etichetă HTML . Analiza acestei politici se actualizează pe măsură ce scrii.

Ca să verifici o politică pe care o ai deja, lipește-o la Evaluează o politică existentă și apasă Evaluează politica; Încarcă în editor o copiază în câmpuri. Totul se întâmplă în browserul tău: politica ta nu este trimisă către niciun server.

Ce face o Content Security Policy

CSP îi spune browserului din ce origini poate o pagină să încarce scripturi, stiluri, imagini, fonturi, cadre și conexiuni. Rolul ei principal este să limiteze atacurile cross-site scripting (XSS): chiar dacă un atacator injectează cod în pagina ta, o politică bună oprește rularea scriptului injectat. Ea controlează și cine îți poate încadra pagina (frame-ancestors), unde pot fi trimise formularele (form-action) și către ce poate indica <base> (base-uri).

Directivele fetch, precum img-src sau font-src, revin la default-src când lipsesc. base-uri, form-action și frame-ancestors nu au această valoare de rezervă, de aceea analiza le cere explicit.

Nonce, hash și strict-dynamic

Permiterea unor gazde (script-src https://cdn.example.com) pare sigură, dar poate fi adesea ocolită: domeniile mari găzduiesc endpoint-uri JSONP și biblioteci vechi pe care un atacator le poate refolosi. Abordarea recomandată de echipele de securitate ale browserelor este o CSP strictă: fiecare <script> legitim poartă un nonce generat de server pentru fiecare răspuns sau este permis prin hash-ul lui, iar 'strict-dynamic' lasă aceste scripturi de încredere să încarce scripturile de care au nevoie. Într-o astfel de configurație, https: și 'unsafe-inline' sunt doar soluții de rezervă pentru browserele foarte vechi; cele moderne le ignoră.

Un nonce funcționează doar dacă se schimbă la fiecare răspuns și nu poate fi ghicit. Cel inserat de Adaugă un nonce este doar un exemplu: serverul sau framework-ul tău trebuie să genereze propriul nonce. Un hash acoperă exact octeții codului inline, așa că reformatarea scriptului cere un hash nou.

Antet, Report-Only și etichetă meta

Trimite politica ca antet de răspuns HTTP ori de câte ori poți. Pune-o mai întâi în producție ca Content-Security-Policy-Report-Only: browserele raportează încălcările (în consolă și la endpoint-ul tău, dacă ai setat unul) fără să blocheze nimic, așa că îți poți repara paginile înainte să aplici politica. Setările de raportare adaugă report-uri pentru browserele mai vechi și report-to cu un antet Reporting-Endpoints.

Varianta <meta http-equiv> e utilă pe găzduirea statică, dar browserele ignoră în ea frame-ancestors, report-uri, report-to și sandbox, iar o etichetă meta Report-Only nu există. Instrumentul elimină aceste directive din etichetă și te anunță.

Întrebări frecvente

Este o problemă 'unsafe-inline' în style-src?

Este mai puțin periculos decât în script-src și foarte des întâlnit, fiindcă multe biblioteci setează stiluri inline. CSS-ul injectat poate totuși strica aspectul unei pagini sau poate scoate date, de aceea analiza îl marchează cu severitate scăzută.

Sunt complete gazdele pentru Google Analytics?

Sunt exemple din ghidul CSP al Google pentru eticheta Google. Google le ajustează în timp și pot fi necesare domenii regionale; verifică documentația actuală a Google și șterge ce nu folosești. Fragmentul inline gtag.js are nevoie, la rândul lui, de un nonce sau de un hash.

De ce îmi blochează politica propriile scripturi inline?

Odată ce script-src este setat fără 'unsafe-inline', fiecare <script> inline și fiecare atribut onclick= este blocat. Mută codul într-un fișier sau adaugă un nonce ori un hash.

Înlocuiește CSP escaparea datelor introduse de utilizatori?

Nu. CSP este a doua linie de apărare. Continuă să escapezi datele afișate și să validezi datele primite; politica limitează pagubele atunci când ceva scapă.

Pot avea mai multe politici?

Da: dacă o pagină primește mai multe antete CSP, o resursă trebuie să le respecte pe toate. Lipește câte o politică pe rând în evaluator.