Content Security Policy og CMP-kerfið þitt: að láta CSP og samþykki vinna saman
Tvö öryggislög sem verða að vera samstíga
Content Security Policy (CSP) segir vafranum frá hvaða uppsprettum síða má hlaða skriftum, stílum, myndum, römmum og netbeiðnum. Samþykkisstjórnunarkerfi (CMP) vinnur öfugt verk: það ákveður hverjar þessara skrifta mega keyra út frá vali notandans. Þegar þetta tvennt er stillt hvort í sínu lagi rekast þau á. CMP-kerfið hleðst ekki vegna þess að CSP lokar á það, eða CSP er losað svo mikið til að rúma CMP og auglýsingamerki að það verndar ekkert lengur.
Þessi leiðarvísir útskýrir hvaða CSP-tilskipanir CMP þarf venjulega, hvernig nonce-gildi hafa samskipti við innsetningu skrifta og hvernig á að rúlla út breytingum án þess að brjóta borðann.
Hvað CMP þarf yfirleitt frá CSP
Nákvæmar kröfur ráðast af söluaðilanum, svo byrjaðu alltaf á skjölum þíns eigin CMP. Almennt skaltu athuga þessar tilskipanir:
script-src— lénið sem CMP-skriftan hleðst frá, auk allra viðbótarskriftuskráa sem það hleður.connect-src— endapunktar sem CMP kallar á meðfetcheða XHR, svo sem stillingar, söluaðilalisti, staðsetning og skráning samþykkis.style-src— lén stílsins, og hugsanlega innbyggðir stílar ef CMP setur inn<style>element eða stillir style-eigindi.img-src— lógó, tákn og allar rakningarlausar pixlamyndir sem CMP notar.font-src— ef borðinn hleður eigin leturgerðum.frame-src— ef CMP notar iframe-ramma, til dæmis til að deila samþykki milli léna.
Á TCF-vefsvæðum skaltu muna að CMP býr einnig til staðsetningarramma sem heitir __tcfapiLocator á síðunni. Sá rammi er búinn til án ytri uppsprettu, svo hann þarf venjulega ekki færslu í frame-src, en vert er að staðfesta það í prófunum.
Vandinn með innbyggða stubbinn
Flest CMP biðja þig um að setja litla innbyggða skriftu — stubbinn — í haus síðunnar, svo aðrar skriftur geti sett köll í biðröð áður en aðal-CMP hleðst. Ströng CSP lokar á innbyggðar skriftur nema þú leyfir þær sérstaklega. Þú hefur þrjá kosti:
- Nonce. Búðu til slembigildi fyrir hvert svar, bættu því við CSP-haus sem
'nonce-...'og við<script>merki stubbsins. Þetta er sveigjanlegasti kosturinn fyrir kvikar síður. - Kjötkássa (hash). Bættu SHA-256 kjötkássu af nákvæmu innihaldi stubbsins við
script-src. Þetta virkar vel fyrir kyrrstæð vefsvæði, en sérhver breyting á stubbnum, jafnvel bil, brýtur það. - Hýsa stubbinn sjálfur sem ytri skrá á þínu eigin léni, sem
'self'nær yfir. Þetta krefst varúðar til að hann hlaðist nógu snemma.
Forðastu 'unsafe-inline' sem flýtileið. Það leyfir sérhverja innbyggða skriftu, sem fjarlægir stóran hluta verndarinnar sem CSP veitir.
Nonce og skriftur sem CMP setur inn
CMP sem lokar á skriftur þar til samþykki liggur fyrir virkar oft með því að halda þeim aftur og setja þær inn síðar. Undir CSP sem byggir á nonce þarf að leyfa þessar innsettu skriftur líka. Tvær algengar aðferðir:
- Dreifing nonce. CMP les nonce úr eigin script-merki og bætir því við hverja skriftu sem það setur inn. Athugaðu hvort CMP-kerfið þitt styður þetta.
'strict-dynamic'. Þetta lykilorð segir vöfrum sem styðja það að treysta skriftum sem hlaðið er af skriftu sem þegar er treyst. Það einfaldar lífið með tag manager-kerfum og CMP sem setja inn skriftur, en þýðir líka að sérhver skrifta sem þú treystir getur hlaðið aðrar, svo treystu af varkárni.
Tag manager-kerfi vekja sömu spurningu. Ef þú hleður auglýsinga- og greiningarmerkjum í gegnum tag manager skaltu fylgja skjölum hans um nonce og tryggja að CMP og tag manager noti samræmda aðferð.
Auglýsingamerki gera CSP erfiðari
Forritatengdar auglýsingar (programmatic) hlaða skriftum og römmum frá mörgum lénum og listinn breytist eftir því sem eftirspurnaraðilar breytast. Útgefendur velja yfirleitt annan af tveimur kostum:
- Stranga CSP á síðum án forritatengdra auglýsinga, og rýmri stefnu þar sem auglýsingar keyra.
- Stefnu sem einblínir á tilskipanir sem eru enn viðráðanlegar, svo sem
frame-ancestors,object-src 'none'ogbase-uri, á meðan uppsprettur skrifta haldast rýmri.
Hvor leiðin sem er ætti CMP að vera á skýrum leyfislista, ekki aðeins undir algildisstaf (wildcard), svo breyting á CSP slökkvi aldrei hljóðlega á borðanum.
Rúllaðu út með Report-Only ham
Notaðu fyrst haushinn Content-Security-Policy-Report-Only. Vafrinn tilkynnir brot án þess að loka á neitt, svo þú sérð hvað ný stefna myndi brjóta.
- Settu stefnuna í loftið í report-only ham með tilkynningarendapunkti.
- Hlaðaðu síður í hreinum vafraprófílum og farðu í gegnum allt samþykkisferlið: fyrsta heimsókn, samþykkja allt, hafna öllu, sérsniðið val, afturköllun.
- Farðu yfir brotatilkynningarnar og vafraborðið (console) með tilliti til lokaðra CMP-auðlinda.
- Lagaðu stefnuna og skiptu síðan yfir í framfylgd.
- Haltu tilkynningum virkum eftir að framfylgd hefst til að ná afturförum.
Einkenni CSP-árekstrar
- Borðinn birtist aldrei og console sýnir CSP-brot fyrir CMP-skriftuna.
- Borðinn birtist en án stíls, vegna þess að
style-srclokar á CSS hans. - Val vistast ekki, vegna þess að
connect-srclokar á kallið sem skráir samþykki. - Auglýsingar eða greiningar hlaðast aldrei eftir samþykki, vegna þess að innsettar skriftur vantar nonce.
__tcfapier óskilgreint, vegna þess að lokað var á innbyggða stubbinn.
Helstu atriði
- Athugaðu
script-src,connect-src,style-src,img-srcogframe-srcfyrir CMP-kerfið þitt. - Leyfðu innbyggða stubbinn með nonce eða kjötkássu, ekki
'unsafe-inline'. - Gakktu úr skugga um að skriftur sem eru settar inn eftir samþykki fái nonce eða falli undir
'strict-dynamic'. - Prófaðu allar samþykkisleiðir í report-only ham áður en þú framfylgir.
- Haltu CMP-kerfinu á skýrum leyfislista svo CSP-breytingar geti ekki slökkt á því.