Content Security Policy ja sinu CMP: kuidas panna CSP ja nõusolek koos toimima
Kaks turvakihti, mis peavad omavahel kokku leppima
Content Security Policy (CSP) ütleb brauserile, millistest allikatest võib leht laadida skripte, stiile, pilte, kaadreid ja võrgupäringuid. Nõusolekuhaldusplatvorm teeb vastupidist tööd: ta otsustab kasutaja valiku põhjal, millised neist skriptidest tohivad käivituda. Kui kaks on seadistatud eraldi, põrkuvad need kokku. CMP ei lae, sest CSP blokeerib selle, või CSP-d lõdvendatakse CMP ja reklaamimärgendite mahutamiseks nii palju, et see ei kaitse enam midagi.
See juhend selgitab, milliseid CSP direktiive CMP tavaliselt vajab, kuidas nonce'id suhtlevad skriptide sissepritsimisega ja kuidas muudatused kasutusele võtta, bännerit rikkumata.
Mida CMP CSP-lt tavaliselt vajab
Täpsed nõuded sõltuvad pakkujast, seega alusta alati oma CMP enda dokumentatsioonist. Üldiselt kontrolli neid direktiive:
script-src— domeen, kust CMP skript laadib, pluss mis tahes täiendavad skriptifailid, mida see laadib.connect-src— lõpp-punktid, mida CMP kutsub väljafetchvõi XHR-iga, näiteks konfiguratsiooni, pakkujate loendi, geolokatsiooni ja nõusoleku logimise lõpp-punktid.style-src— stiililehe domeen ning võimalik et inline-stiilid, kui CMP süstib<style>elemendi või seab stiiliatribuute.img-src— logod, ikoonid ja kõik jälgimisvabad pikslid, mida CMP kasutab.font-src— kui bänner laadib oma fonte.frame-src— kui CMP kasutab iframe'e, näiteks domeeniülese nõusoleku jagamiseks.
TCF-i saitidel pea meeles, et CMP loob lehele ka lokaatorkaadri nimega __tcfapiLocator. See kaader luuakse ilma kaugallikata, seega ei vaja see tavaliselt frame-src kirjet, kuid seda tasub testimisel kinnitada.
Inline stubi probleem
Enamik CMP-sid palub paigutada lehe päisesse väikese inline-skripti — stubi —, et teised skriptid saaksid kutseid järjekorda panna enne põhi-CMP laadimist. Range CSP blokeerib inline-skriptid, kui sa neid selgesõnaliselt ei luba. Sul on kolm võimalust:
- Nonce. Genereeri iga vastuse jaoks juhuslik väärtus, lisa see CSP päisesse kujul
'nonce-...'ja stubi<script>märgendisse. See on dünaamiliste lehtede jaoks kõige paindlikum valik. - Räsi. Lisa stubi täpse sisu SHA-256 räsi direktiivi
script-src. See sobib hästi staatilistele saitidele, kuid iga muudatus stubis, isegi tühik, rikub selle. - Stubi ise majutamine välise failina oma domeenil, mida katab
'self'. See nõuab hoolt, et see laadiks piisavalt vara.
Väldi 'unsafe-inline' kasutamist otseteena. See lubab iga inline-skripti, mis kaotab suure osa kaitsest, mida CSP pakub.
Nonce'id ja skriptid, mida CMP süstib
CMP, mis blokeerib skripte kuni nõusolekuni, töötab sageli nii, et hoiab neid tagasi ja süstib hiljem. Nonce'il põhineva CSP korral tuleb ka need süstitud skriptid lubada. On kaks levinud lähenemist:
- Nonce'i edasikandmine. CMP loeb nonce'i oma skriptimärgendist ja lisab selle igale süstitavale skriptile. Kontrolli, kas su CMP seda toetab.
'strict-dynamic'. See märksõna käsib toetavatel brauseritel usaldada skripte, mille on laadinud juba usaldatud skript. See lihtsustab elu märgendihaldurite ja CMP-dega, mis skripte süstivad, kuid see tähendab ka, et iga skript, mida usaldad, saab laadida teisi, seega usalda ettevaatlikult.
Märgendihaldurid tekitavad sama küsimuse. Kui laadid reklaami- ja analüütikamärgendid märgendihalduri kaudu, järgi selle dokumentatsiooni nonce'ide kohta ja veendu, et CMP ja märgendihaldur kasutavad järjepidevat lähenemist.
Reklaamimärgendid raskendavad CSP-d
Programmaatiline reklaam laadib skripte ja kaadreid paljudelt domeenidelt ning loend muutub koos nõudluspartneritega. Avaldajad teevad tavaliselt ühe kahest valikust:
- Range CSP lehtedel ilma programmaatilise reklaamita ja laiem poliitika seal, kus reklaamid töötavad.
- Poliitika, mis keskendub direktiividele, mis jäävad hallatavaks, näiteks
frame-ancestors,object-src 'none'jabase-uri, samal ajal kui skriptiallikad jäävad laiemaks.
Mõlemal juhul peaks CMP olema selgesõnalises lubatud loendis, mitte katetud ainult metamärgiga, et CSP muudatus ei keelaks kunagi vaikselt bännerit.
Võta kasutusele report-only režiimiga
Kasuta esmalt päist Content-Security-Policy-Report-Only. Brauser teatab rikkumistest, midagi blokeerimata, nii et näed, mida uus poliitika rikuks.
- Paiguta poliitika report-only režiimis koos aruandluse lõpp-punktiga.
- Lae lehti puhastes brauseriprofiilides ja käi läbi kogu nõusolekuvoog: esimene külastus, nõustu kõigega, keeldu kõigest, kohandatud valik, tagasivõtmine.
- Vaata üle rikkumisaruanded ja brauseri konsool blokeeritud CMP ressursside osas.
- Kohanda poliitikat, seejärel lülitu jõustamisele.
- Hoia aruandlus pärast jõustamist sisse, et tabada regressioone.
CSP konflikti sümptomid
- Bänner ei ilmu kunagi ja konsoolis on CSP rikkumine CMP skripti kohta.
- Bänner ilmub, kuid on stiilideta, sest
style-srcblokeerib selle CSS-i. - Valikuid ei salvestata, sest
connect-srcblokeerib nõusoleku logimise kutse. - Reklaamid või analüütika ei lae pärast nõusolekut kunagi, sest süstitud skriptidel puudub nonce.
__tcfapion defineerimata, sest inline stub blokeeriti.
Peamised järeldused
- Kontrolli oma CMP jaoks
script-src,connect-src,style-src,img-srcjaframe-src. - Luba inline stub nonce'i või räsiga, mitte
'unsafe-inline'-iga. - Veendu, et pärast nõusolekut süstitud skriptid saavad nonce'i või on kaetud
'strict-dynamic'-iga. - Testi enne jõustamist iga nõusolekutee report-only režiimis.
- Hoia CMP selgesõnaliselt lubatud loendis, et CSP muudatused seda keelata ei saaks.