Utilia

CSP generator (Content Security Policy)

Napravi Content-Security-Policy zaglavlje, meta oznaku i Report-Only verziju sa šablonima, nonce vrednostima i SHA-256 heševima, pa proveri postojeću politiku.

Kreni od šablona

Google hostovi su primeri iz Google uputstva za CSP za Google tag. Google ih s vremena na vreme menja: proveri aktuelnu dokumentaciju i ukloni ono što ne koristiš.

Direktive

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

Brzo dodavanje

Nonce mora biti nova slučajna vrednost u svakom odgovoru: generiše ga tvoj server i ponavlja se u svakom <script nonce="…">. Fiksan nonce ništa ne štiti.

Izračunaj heš inline skripte ili stila

Heš obuhvata tačan tekst između oznaka, uključujući razmake i prelome redova: svaka izmena zahteva novi heš. Inline rukovaoci događaja (onclick=…) takođe zahtevaju 'unsafe-hashes'.

Izveštaji o prekršajima

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

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

Pregled ove politike

Proceni postojeću politiku

Kako da napraviš politiku

  1. Pod Kreni od šablona izaberi polaznu tačku: Strogo (nonce + strict-dynamic), Zaključan statički sajt, Uobičajen veb-sajt ili Uobičajeno + Google Analytics / Ads. Uređivač se otvara sa šablonom uobičajenog veb-sajta.
  2. Prilagodi Direktive. Svako polje prima izvore razdvojene razmakom; prazno polje izostavlja direktivu.
  3. Pomoću Brzo dodavanje dodaj ključnu reč u izabranu Direktiva: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Dodaj nonce umeće slučajan 128-bitni nonce.
  4. Da bi dozvolio određenu inline skriptu bez 'unsafe-inline', nalepi je (ili HTML oko nje) u Izračunaj heš inline skripte ili stila i klikni Izračunaj SHA-256 i dodaj.
  5. Označi upgrade-insecure-requests (učitava http:// resurse preko https://) ako neki stari URL-ovi još koriste http://, a po želji upiši i URL krajnje tačke za izveštaje (opciono).
  6. Kopiraj HTTP zaglavlje, Report-Only zaglavlje (testiranje bez blokiranja) ili HTML oznaka. Pregled ove politike se ažurira dok kucaš.

Ako želiš da proveriš politiku koju već imaš, nalepi je pod Proceni postojeću politiku i klikni Proceni politiku; Učitaj u uređivač je kopira u polja.

Alat radi u tvom pregledaču. Ništa što upišeš ne šalje se na server.

Šta radi Content Security Policy

CSP govori pregledaču sa kojih izvora (origin) stranica sme da učitava skripte, stilove, slike, fontove, okvire i veze. Njegov glavni zadatak je da ograniči cross-site scripting (XSS): čak i ako napadač ubaci markup u tvoju stranicu, dobra politika sprečava izvršavanje ubačene skripte. Takođe određuje ko sme da ugradi tvoju stranicu u okvir (frame-ancestors), kuda se obrasci smeju slati (form-action) i na šta sme da pokazuje <base> (base-uri).

Fetch direktive kao što su img-src ili font-src vraćaju se na default-src kada ih nema. base-uri, form-action i frame-ancestors nemaju takvu rezervu, zbog čega ih pregled traži izričito.

Nonce, heš i strict-dynamic

Dozvoljavanje hostova (script-src https://cdn.example.com) deluje bezbedno, ali se često može zaobići: veliki domeni služe JSONP krajnje tačke i stare biblioteke koje napadač može da iskoristi. Pristup koji preporučuju timovi za bezbednost pregledača je stroga CSP politika: svaki legitiman <script> nosi nonce koji server generiše za svaki odgovor ili je dozvoljen svojim heš vrednošću, a 'strict-dynamic' dopušta tim pouzdanim skriptama da učitaju skripte koje su im potrebne. U takvoj postavci su https: i 'unsafe-inline' samo rezerva za veoma stare pregledače; moderni ih ignorišu.

Nonce radi samo ako se menja u svakom odgovoru i ako je nepredvidiv. Onaj koji ubacuje Dodaj nonce samo je primer: tvoj server ili framework mora da generiše sopstveni. Heš pokriva tačne bajtove inline koda, pa promena formatiranja skripte zahteva novi heš.

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: pregledači prijavljuju prekršaje (u konzolu, a ako si postavio krajnju tačku, i na nju) bez ikakvog blokiranja, pa možeš da popraviš stranice pre nego što počneš da je sprovodiš. Podešavanja izveštaja dodaju report-uri za starije pregledače i report-to sa Reporting-Endpoints zaglavljem.

Verzija sa <meta http-equiv> zgodna je na statičkom hostingu, ali pregledači u njoj ignorišu frame-ancestors, report-uri, report-to i sandbox, a Report-Only meta oznaka ne postoji. Alat te direktive uklanja iz oznake i to ti javlja.

Šta pregled proverava

Odeljak Pregled ove politike razvrstava nalaze po ozbiljnosti (Visoka, Srednja, Niska, Info). Traži prazne ili duple direktive, nepoznate nazive (verovatna greška u kucanju), ključne reči bez jednostrukih navodnika, 'unsafe-inline' i 'unsafe-eval' u script-src, džokere i cele šeme kao data:, običan http://, kao i nedostajuće object-src, base-uri, form-action i frame-ancestors. To je statička provera teksta politike: ne zna šta se stvarno učitava na tvojoj stranici, pa je isprobaj u Report-Only režimu pre nego što je sprovedeš.

Česta pitanja

Da li je '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 da unakazi stranicu ili da odaje podatke, pa ga pregled navodi kao nisku ozbiljnost.

Da li je spisak Google Analytics hostova potpun?

To su primeri iz Google uputstva za CSP za Google tag. Google ih vremenom menja, a mogu biti potrebni i regionalni domeni; proveri aktuelnu Google dokumentaciju i ukloni ono što ne koristiš. Inline gtag.js isečak takođe zahteva nonce ili heš.

Zašto moja politika blokira moje inline skripte?

Čim se postavi script-src bez 'unsafe-inline', blokira se svaki inline <script> i svaki atribut onclick=. Prebaci kod u fajl ili dodaj nonce ili heš.

Da li CSP zamenjuje escapovanje korisničkog unosa?

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

Mogu li da imam više politika?

Da: ako stranica dobije više CSP zaglavlja, resurs mora da zadovolji sve. U procenjivač lepi jednu po jednu politiku.