Defaults.Exposed › Popravki › Content-Security-Policy (CSP)
Kako popraviti Content-Security-Policy (CSP)
Politika varnosti vsebine je varnostno pravilo, ki ga vaša spletna stran preda brskalniku vsakega obiskovalca in mu pove, katera koda sme teči. Brez nje, če na stran kdaj pristane karkoli zlonamernega — prek polja za komentarje, vdrtega vtičnika ali skripte tretje osebe — bo brskalnik to svobodno zagnal, vključno s kodo, ki tiho skimira številke kartic in gesla vaših strank, medtem ko se ključavnica še vedno prikazuje.
Bistvo za vaše podjetje: Če je vaša stran kdaj prilagojena, zlonamerna koda bere podrobnosti plačilnih kartic in prijavne podatke vaših strank neposredno z vaše blagajne, medtem ko je vse videti popolnoma normalno — kar vam pusti s povratnimi terjatvami, zahtevki za goljufijo, prijavljeno kršitvijo podatkov in neuspešnim preverjanjem, ki ga varnostne ekipe večjih naročnikov uporabijo za zaustavitev ali uničenje posla.
Kaj vas to lahko stane
- Skrita koda se vtihotapi na eno od vaših strani in tiho kopira vsako številko kartice in geslo, ki ga vaše stranke vnesejo na blagajni, ter ga pošilja napadalcu, medtem ko vaša stran izgleda in deluje popolnoma normalno — izveste le, ko prispejo pritožbe o goljufijah.
- Prevarant na vaši pravi spletni strani nasadi lažni obrazec 'plačaj tukaj', ki zajema plačila na njihov račun; stranke mislijo, da so plačale vam, vas krivijo, ko blago ne prispe in zahtevajo povračilo.
- Varnostna ekipa večjega naročnika pregleda vašo stran, vidi, da ta osnovna zaščita ni vklopljena in to označi — zaustavi ali izgubi posel, dokler ne dokažete, da je to popravljeno.
- Kršitev, ki jo je mogoče pripisati manjkajočemu standardnemu zaščitnemu ukrepu, postane prijavljivi incident: vprašanja regulatorjev, obvestila strankam in udarec po ugledu, ki stane daleč več od brezplačnega popravka.
Zakaj je to pomembno. Ključavnica dokazuje, da je povezava z vašo stranjo zasebna, a ne naredi ničesar za nadzor, katera koda teče, ko je obiskovalec na strani. Politika varnosti vsebine je zaščita, ki to naredi — brskalnikom naroči, naj ignorirajo katero koli skripto, ki ni prišla iz vira, ki mu zaupate, tako da en prilagojeno polje, oglas ali vtičnik ne more postati orodje za krajo denarja in podatkov vaših strank. Je ocenjevano preverjanje na vašem kartončku, vredno resnih točk, in eno od prvih stvari, ki jo profesionalni varnostni pregled išče.
Kaj to je v preprostem jeziku
Ko nekdo obišče vašo spletno stran, njihov brskalnik prenese vašo stran in zažene katero koli kodo na njej — skripte, ki spravljajo menije gor in dol, omogočajo gumbe, oddajajo plačilne obrazce in tako naprej. Privzeto brskalnik vsemu zaupa. Nima načina vedeti, katera koda je zares vaša in katera je bila vtihotapana s strani nekoga drugega.
Politika varnosti vsebine (pogosto skrajšana na CSP) je kratek seznam pravil, ki ga vaša spletna stran pripne vsaki strani in brskalniku pove: “Zaženi le kodo iz teh virov, ki sem jih odobril, in zavrni vse ostalo.” Je razlika med nočnim klubom, ki spusti kogar koli noter, in tistim s seznamom gostov na vratih.
Razlog, zakaj je to tako pomembno, je, da so spletne strani nenehno prilagajane — ne vedno z vdorom v vaš strežnik, a prek hrbtnih vrat, ki jih večina strani pusti odprte: polje za komentarje, iskalno polje, zastarel vtičnik, skripta tretje osebe za oglase ali analitiko ali widget za klepet. Če napadalec dobi celo eno vrstico lastne kode na eno od vaših strani, jo brskalnik zažene kot da bi bila vaša. Od tam prebere vse, kar stranke vtipkajo — številke kartic, gesla, naslove — in to tiho pošlje drugam. Politika varnosti vsebine zapre ta vrata z zavrnitvijo zagona česarkoli iz vira, ki ga niste odobrili.
Kaj vas to lahko stane
To ni abstraktno. Napad, ki ga politika varnosti vsebine preprečuje — koda, vtihotapana v stran, ki krade podatke od vaših lastnih strank — je za nekaterimi največjimi primeri skimiranja kartic v zgodovini. Kako se navadno odvija za normalno podjetje:
-
Neviden skimer blagajne. Napadalec skozi ranljiv vtičnik ali ogroženo skripto tretje osebe vtihotapi nekaj vrstic kode na vašo stran blagajne. Vsaka številka kartice, ime in CVV, ki jih vaše stranke vtipkajo, se kopiirajo in pošljejo napadalcu v realnem času. Vaša stran izgleda in deluje popolnoma; ključavnica je tam. Izveste tedne pozneje, ko vaš plačilni ponudnik pokliče glede skupka poročil o goljufijah, ki se sledijo nazaj v vašo trgovino.
-
Lažni plačilni obrazec. Prevarant vstavi prepričljivo “plačaj tukaj” polje na vašo pravo spletno stran. Stranke vnesejo svoje podatke, ki zaupajo vaši blagovni znamki; denar in podatki gredo k napadalcu. Stranke vas krivijo — in se ne motijo, ker se je to zgodilo na vaši strani.
-
Izgubljena pogodba. Avtomatiziran pregled varnostne ekipe večjega potencialnega naročnika med skrbnim pregledom dobavitelja takoj pokaže manjkajočo politiko varnosti vsebine kot varnostno vrzel z visoko resnostjo. Za pregledovalca nabave ali varnosti ta posamezna manjkajoča zaščita bere kot “ta dobavitelj ne naredi osnov” — in posel se zaustavi, medtem ko prosijo za sanacijo, ali tiho gre k konkurentu, ki je prestalo preverjanje.
-
Prijavljiva kršitev. Ko se kršitev podatkov pripisuje manjkajočemu standardnemu brezplačnemu zaščitnemu ukrepu, preneha biti smola in začne izgledati kot malomarnost. To spremeni vprašanja regulatorja, obveznost obveščanja strank in strošek — tako globo kot škodo ugleda, ki ostane dolgo po tem, ko je incident zaprt.
-
Ogroženi oglas ali widget. Mnoge strani nalagajo kodo od zunanjih strani — oglaševalska omrežja, pisave, podporni klepet, analitika. Če je katera koli od teh ogrožena, zlonamerna koda pride neposredno na vaše strani. Politika varnosti vsebine omejuje obseg z dovoljevanjem le konkretnih zunanjih virov, ki jim zaupate, zato kršitev enega dobavitelja ne postane samodejno vaša.
Kaj to dejansko je (podrobnost)
Politika varnosti vsebine se dostavi kot ena odgovornik glave HTTP — vrstica, ki jo vaš spletni strežnik pošlje z vsako stranjo. Njena vrednost je nabor direktiv, vsaka s tipom vsebine in dovoljenimi viri zanjo. Na primer:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'
V preprostem jeziku: privzeto nalagaj stvari le z moje lastne strani; zaženi skripte le z moje lastne strani; ne dovoli starih vtičnikov; in ne dovolj drugim stranem, da me vdelajo v okvir.
Kako izgleda “dobro”. Naše preverjanje ne išče le prisotnosti glave — prebere politiko direktivo za direktivo in oceni, kako močna je dejansko, tako kot bi varnostni pregledovalec. Močna politika:
- Nastavi omejevalno osnovo (
default-src 'self') in jo razširi le za konkretne zaupanja vredne tretje osebe, ki jih dejansko uporabljate. - Izogiba se vrzelim. Ne uporablja
'unsafe-inline'ali'unsafe-eval'za skripte in ne uporablja nadomestnih znakov (*) ali golih shem virov (kothttps:) za skripte — te dejansko znova odprejo vrata, ki jih je politika mišljena zapreti. Kjer so vgranjene skripte zares potrebne, uporablja nonce ali hash, da teče le vaša konkretna odobrena koda. - Zaklene uokvirjanje z
frame-ancestors 'self'in onemogoči zastarele vtičnike zobject-src 'none'. - Je uveljavljena, ne samo za poročanje. Glava
Content-Security-Policy-Report-Onlyle opazuje; nudi nič zaščite pri zagonu. Naše preverjanje ji da majhen delček zasluge in tega nikoli ne zabeleži kot uspeh. Zaščiteni ste le, ko je politika uveljavljana.
Kako to popraviti (brezplačno, ~1–2 uri)
Posredujte to vaši IT osebi ali tistemu, ki vodi vašo spletno stran — popravek sam je popolnoma brezplačen. Zaračunavamo le spremljanje, da ostane nameščen in pravilen sčasoma; vklop ne stane nič. Razlog, zakaj to traja uro ali dve namesto minut, je skrben preizkusni korak, ki prepreči, da bi po nesreči blokiral dele vaše lastne strani.
-
Začnite v načinu samo za poročanje — še ne uveljavljajte. Dodajte glavo HTTP odziva
Content-Security-Policy-Report-Only. To opazuje in beleži, kaj bi bilo blokirano brez dejanskega blokiranja česarkoli, tako da živa stran ostane delujoča, medtem ko se učite, od česa je vsaka stran dejansko odvisna. (Pomembno: samo za poročanje samo po sebi nudi obiskovalcem nič zaščite — je le varni prvi korak.) -
Zgradite politiko iz tega, kar vaša stran dejansko uporablja. Preglejte poročila, da najdete vsak legitimen vir skript, stilov, pisav in slik — vašo lastno domeno, vašo analitiko, vašega plačilnega ponudnika, gostitelja pisav, widget za klepet — in jih navedite kot dovoljene vire.
-
Izogibajte se vrzelim, ki premagajo cel namen. Izogibajte se
'unsafe-inline'in'unsafe-eval'za skripte in se izogibajte virom z nadomestnimi znaki, kot sta*in gole sheme, kothttps:za skripte. -
Zaklenite uokvirjanje in vtičnike. Dodajte
frame-ancestors 'self'inobject-src 'none'. -
Preklopite iz samo za poročanje na uveljavljanje. Ko so poročila čista in stran deluje, spremenite ime glave iz
Content-Security-Policy-Report-OnlynaContent-Security-Policy. To je korak, ki dejansko zagotavlja zaščito — politika samo za poročanje sama po sebi tega ne naredi in ne bo prestala preverjanja.Kjer nastavite glavo, je odvisno od vaše platforme:
- Cloudflare: Pravila → Pravila preoblikovanja → Spremeni glavo odziva → nastavite
Content-Security-Policy. - 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): dodajte glavo HTTP odziva po meri, ki se imenuje
Content-Security-Policy, z vrednostjo politike.
- Cloudflare: Pravila → Pravila preoblikovanja → Spremeni glavo odziva → nastavite
-
Znova preverite svojo domeno, da potrdite, da je politika zdaj prikazana kot vklopljena in uveljavljana brez oslabljenih vrzeli.
Pogoste napake
- Ustaviti pri samo za poročanje. Najpogostejša napaka: politika je dodana v načinu samo za poročanje, vsi se premaknejo naprej in stran nikoli dejansko ni zaščitena. Samo za poročanje ne blokira ničesar. Morate preklopiti na uveljavljanje.
- Sega po
'unsafe-inline', da bi “samo delovalo”. Ko politika blokira legitimno vgrajeno skripto, je hiter popravek dovoliti vse vgrajene skripte — a to znova odpre natanko luknjo, ki jo je politika mišljena zapreti. Namesto tega uporabite nonce ali hash. - Uporaba nadomestnega znaka. Goli
*(alihttps:) vscript-srcdovoli skripte od koderkoli, kar pomeni, da politika nudi skoraj nič realne zaščite in bo še vedno dosegla nizko oceno. - Pozabljanje virov tretjih oseb. Uveljavljanje stroge politike, ne da bi najprej navedli legitimne zunanje storitve, ki jih uporabljate, lahko pokvari dele vaše lastne strani — kar je natanko razlog, zakaj preizkusni korak samo za poročanje obstaja.
- Nastavljanje le na domači strani. Politika mora pokrivati vsako stran, zlasti blagajno, prijavo in strani računa — to so tiste, ki se jih splača napasti.
- Obravnavati jo kot nadomestek za ključavnico. Politika varnosti vsebine in HTTPS/HSTS ščitita različne stvari. Hočete vse; eno ne nadomesti drugega.
Pogosta vprašanja
Nisem tehničen — ali se s tem ukvarjam sam?
Podrobnosti vam ni treba razumeti. To je nastavitev, ki jo doda tisti, ki vodi vašo spletno stran ali gostovanje, in na storitvah, kot je Cloudflare, je večinoma vodena. Posredujte jim razdelek 'Kako to popraviti' spodaj. Je brezplačno; edina previdnost je, da bi jo morali najprej uvesti v preizkusnemu načinu samo za opazovanje, da ne blokira po nesreči delov vaše lastne strani — kar je natanko to, kar koraki zajemajo.
Že imam ključavnico in SSL certifikat — ali ni moja stran varna?
Ključavnica zavaruje dostavo vaše strani; ne nadzira, kaj teče znotraj nje. Če zlonamerna koda kdaj konča na strani — prek vdrtega vtičnika, ogroženega oglasa ali vstavljenega polja — ključavnica tega ne bo preprečila pri kraji podatkov. Politika varnosti vsebine je plast, ki omejuje, kaj je sploh dovoljeno teči. Ščitita različne stvari in hočete oboje.
Ali bi vklop tega pokvaril mojo stran?
Lahko, če je vklopljeno agresivno naenkrat, ker morda blokira legitimne skripte, ki jih dejansko uporabljate. Zato je standardni pristop začeti v načinu 'samo za poročanje', ki opazuje brez blokiranja, popraviti vse, kar označi in šele nato uveljavljati. Narejenega na ta način je varno — in preizkusni korak je vgrajen v popravek spodaj.
Že smo jo nastavili v načinu 'samo za poročanje' — ali smo zaščiteni?
Ne, in to je najpogostejši lažen občutek varnosti. Način samo za poročanje opazuje in beleži, kaj bi bilo blokirano, a ne blokira ničesar — obiskovalci nimajo nobene realne zaščite. Je le varni prvi korak. Naše preverjanje dobi le majhen delček zasluge za samo za poročanje in ga ne bo zabeležilo kot uspeh. Zaščiteni ste le, ko preklopite na uveljavljeni način.
Ali to vpliva na naš oceno ali je le svetovalnega značaja?
Vpliva na vašo oceno. Preverjanje politike varnosti vsebine je ocenjevano in vredno do 25 točk v kategoriji Spletna varnost. Manjkajoča ali šibka politika je označena z visoko resnostjo in vlečt vašo oceno navzdol — in je natanko vrsta vrzeli, o kateri sprašuje varnostni vprašalnik naročnika.
Naš razvijalec je dodal politiko, a ocena je še vedno nizka — zakaj?
Politika lahko obstaja in je vseeno šibka. Najpogostejši krivci so vrzeli, kot sta 'unsafe-inline' in 'unsafe-eval' za skripte ali nadomestni znaki (*), ki znova odprejo natanko vrzel, ki jo je politika mišljena zapreti. Naše preverjanje prebere politiko direktivo za direktivo in oceni te šibkosti — politika, ki karkoli dovoli, dobi malo boljšo oceno kot nobena. Popravek je zaostritev pravil skript z nonce ali hash vrednostmi namesto teh vrzeli.