Utilia

CSP generator

Izradi Content-Security-Policy zaglavlje, meta oznaku i Report-Only verziju uz predloške, nonce i SHA-256 hasheve te provjeri postojeću politiku.

Počni od predloška

Google hostovi su primjeri iz Googleovih CSP smjernica za Google tag. Google ih s vremena na vrijeme mijenja: provjeri aktuelnu dokumentaciju i ukloni ono što ne koristiš.

Direktive

Izvori odvojeni razmakom. Ostavi polje prazno da izostaviš direktivu (fetch direktive tada koriste default-src).

Brzo dodavanje

Nonce mora biti nova slučajna vrijednost u svakom odgovoru, koju generiše tvoj server i ponavlja u svakom <script nonce="…">. Fiksni nonce ne štiti ništa.

Izračunaj hash inline skripte ili stila

Hash obuhvata tačan tekst između oznaka, uključujući razmake i prelome redova: svaka promjena traži novi hash. Inline rukovaoci događajima (onclick=…) trebaju i 'unsafe-hashes'.

Izvještaji o kršenjima

Dodaje report-uri (stariji preglednici) i report-to sa zaglavljem Reporting-Endpoints.

U <meta> oznaci preglednici zanemaruju frame-ancestors, report-uri, report-to i sandbox, a Report-Only nije podržan. Stavi oznaku na sam početak <head>: važi samo za sadržaj koji dolazi poslije nje.

Pregled ove politike

Procijeni postojeću politiku

Kako izraditi politiku

  1. Odaberi početnu tačku pod Počni od predloška: Strogi (nonce + strict-dynamic), Zaključani statični sajt, Tipičan web-sajt ili Tipičan + Google Analytics / Ads. Uređivač se otvara s predloškom tipičnog web-sajta.
  2. Podesi Direktive. Svako polje prima izvore odvojene razmakom; prazno polje izostavlja direktivu.
  3. Pomoću Brzo dodavanje dodaj ključnu riječ u odabranu Direktiva: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Dodaj nonce ubacuje slučajni 128-bitni nonce.
  4. Da dozvoliš određenu inline skriptu bez 'unsafe-inline', zalijepi je (ili HTML oko nje) u Izračunaj hash inline skripte ili stila i klikni Izračunaj SHA-256 i dodaj.
  5. Označi upgrade-insecure-requests ako neki stari URL-ovi još koriste http://, a po želji upiši URL krajnje tačke za izvještaje (neobavezno).
  6. Kopiraj HTTP zaglavlje, Report-Only zaglavlje (testiranje bez blokiranja) ili HTML oznaku. Pregled ove politike se osvježava dok kucaš.

Da provjeriš politiku koju već imaš, zalijepi je pod Procijeni postojeću politiku i klikni Procijeni politiku; Učitaj u uređivač je kopira u polja.

Sve radi u tvom pregledniku. Ništa što upišeš ne šalje se na server.

Šta radi Content Security Policy

CSP govori pregledniku s kojih izvora stranica smije učitavati skripte, stilove, slike, fontove, okvire i veze. Glavna svrha mu je ograničavanje cross-site scriptinga (XSS): čak i ako napadač ubaci markup u tvoju stranicu, dobra politika sprečava izvršavanje ubačene skripte. Takođe kontroliše ko smije ugraditi tvoju stranicu (frame-ancestors), kamo se obrasci mogu slati (form-action) i na šta <base> smije pokazivati (base-uri).

Fetch direktive kao što su img-src ili font-src vraćaju se na default-src kad nedostaju. base-uri, form-action i frame-ancestors se ne vraćaju na njega, zbog čega ih pregled izričito traži.

Nonce, hashevi i strict-dynamic

Dozvoljavanje hostova (script-src https://cdn.example.com) djeluje sigurno, ali se često može zaobići: veliki domeni hostuju JSONP krajnje tačke i stare biblioteke koje napadač može iskoristiti. Pristup koji preporučuju sigurnosni timovi preglednika je strogi CSP: svaki legitimni <script> nosi nonce koji server generiše za svaki odgovor ili je dozvoljen svojim hashom, a 'strict-dynamic' omogućava tim pouzdanim skriptama da učitaju skripte koje trebaju. U takvoj postavci https: i 'unsafe-inline' služe samo kao rezerva za veoma stare preglednike; moderni ih zanemaruju.

Nonce radi samo ako se mijenja u svakom odgovoru i ako je nepredvidiv. Onaj koji ubacuje Dodaj nonce je samo primjer: tvoj server ili framework mora generisati vlastiti. Hash obuhvata tačne bajtove inline koda, pa promjena formatiranja skripte traži novi hash.

Zaglavlje, Report-Only i meta oznaka

Politiku šalji kao HTTP zaglavlje odgovora kad god možeš. Prvo je uvedi kao Content-Security-Policy-Report-Only: preglednici prijavljuju kršenja (u konzolu i na tvoju krajnju tačku ako si je postavio) ne blokirajući ništa, pa možeš popraviti stranice prije nego što počneš primjenjivati politiku. Postavke izvještavanja dodaju report-uri za starije preglednike i report-to sa zaglavljem Reporting-Endpoints.

Verzija <meta http-equiv> je zgodna na statičnom hostingu, ali preglednici u njoj zanemaruju frame-ancestors, report-uri, report-to i sandbox, a Report-Only meta oznaka ne postoji. Alat te direktive uklanja iz oznake i to navodi.

Česta pitanja

Je li 'unsafe-inline' u style-src problem?

Manje je opasan nego u script-src i veoma je čest jer mnoge biblioteke postavljaju inline stilove. Ubačeni CSS ipak može unakaziti stranicu ili otkriti podatke, pa ga pregled navodi kao nisku ozbiljnost.

Jesu li Google Analytics hostovi potpuni?

To su primjeri iz Googleovih CSP smjernica za Google tag. Google ih s vremenom prilagođava, a mogu zatrebati i regionalni domeni; provjeri Googleovu aktuelnu dokumentaciju i ukloni ono što ne koristiš. Inline isječak gtag.js također traži nonce ili hash.

Zašto moja politika blokira moje vlastite inline skripte?

Čim se script-src postavi bez 'unsafe-inline', blokira se svaki inline <script> i atribut onclick=. Premjesti kod u datoteku ili dodaj nonce ili hash.

Zamjenjuje li CSP escapovanje korisničkog unosa?

Ne. CSP je druga linija odbrane. I dalje escapuj izlaz i provjeravaj unos; politika ograničava štetu kad nešto promakne.

Mogu li imati više politika?

Da: ako stranica primi više CSP zaglavlja, resurs mora zadovoljiti sve. U evaluator lijepi jednu po jednu politiku.