Content Security Policy a váš CMP: ako zosúladiť CSP a súhlas
Dve bezpečnostné vrstvy, ktoré sa musia zhodnúť
Content Security Policy (CSP) hovorí prehliadaču, z akých zdrojov smie stránka načítavať skripty, štýly, obrázky, frame a sieťové požiadavky. Consent management platform robí opačnú prácu: rozhoduje, ktoré z týchto skriptov smú bežať podľa voľby používateľa. Keď sa obe konfigurujú samostatne, kolidujú. CMP sa nenačíta, lebo ho CSP blokuje, alebo sa CSP natoľko uvoľní kvôli CMP a reklamným tagom, že už nič nechráni.
Tento sprievodca vysvetľuje, ktoré direktívy CSP CMP typicky potrebuje, ako nonce spolupracujú s vkladaním skriptov a ako zmeny nasadiť bez pokazenia bannera.
Čo CMP zvyčajne od CSP potrebuje
Presné požiadavky závisia od poskytovateľa, preto vždy vychádzajte z dokumentácie vášho CMP. Vo všeobecnosti skontrolujte tieto direktívy:
script-src— doména, z ktorej sa načítava skript CMP, plus všetky ďalšie skriptové súbory, ktoré načítava.connect-src— koncové body, ktoré CMP volá cezfetchalebo XHR, napríklad konfigurácia, zoznam dodávateľov, geolokácia a logovanie súhlasu.style-src— doména štýlov a prípadne inline štýly, ak CMP vkladá prvok<style>alebo nastavuje atribúty style.img-src— logá, ikony a všetky pixely bez sledovania, ktoré CMP používa.font-src— ak banner načítava vlastné písma.frame-src— ak CMP používa iframy, napríklad na zdieľanie súhlasu medzi doménami.
Na weboch s TCF nezabúdajte, že CMP na stránke vytvára aj locator frame s názvom __tcfapiLocator. Tento frame sa vytvára bez vzdialeného zdroja, takže zvyčajne nepotrebuje záznam vo frame-src, ale oplatí sa to potvrdiť pri testovaní.
Problém inline stubu
Väčšina CMP vás žiada, aby ste do hlavičky stránky vložili malý inline skript — stub — aby ostatné skripty mohli zaraďovať volania do fronty pred načítaním hlavného CMP. Prísna CSP inline skripty blokuje, pokiaľ ich výslovne nepovolíte. Máte tri možnosti:
- Nonce. Vygenerujte náhodnú hodnotu pre každú odpoveď, pridajte ju do hlavičky CSP ako
'nonce-...'a do značky<script>stubu. Je to najflexibilnejšia možnosť pre dynamické stránky. - Hash. Pridajte do
script-srchash SHA-256 presného obsahu stubu. Pre statické weby to funguje dobre, ale akákoľvek zmena stubu, aj medzera, ho pokazí. - Self-hosting stubu ako externého súboru na vlastnej doméne, pokrytého
'self'. Treba dbať na to, aby sa načítal dostatočne skoro.
Nepoužívajte 'unsafe-inline' ako skratku. Povoľuje každý inline skript, čím sa výrazne znižuje ochrana, ktorú CSP poskytuje.
Nonce a skripty vkladané CMP
CMP, ktorý blokuje skripty do udelenia súhlasu, často funguje tak, že ich zadrží a vloží neskôr. Pri CSP založenej na nonce treba povoliť aj tieto vložené skripty. Existujú dva bežné prístupy:
- Šírenie nonce. CMP prečíta nonce zo svojej vlastnej značky skriptu a pridá ho ku každému vloženému skriptu. Skontrolujte, či to váš CMP podporuje.
'strict-dynamic'. Toto kľúčové slovo hovorí podporovaným prehliadačom, aby dôverovali skriptom načítaným už dôveryhodným skriptom. Zjednodušuje život s tag managermi a CMP, ktoré vkladajú skripty, ale znamená aj to, že každý skript, ktorému dôverujete, môže načítať ďalšie, preto dôverujte opatrne.
Rovnakú otázku vyvolávajú tag managery. Ak načítavate reklamné a analytické tagy cez tag manager, riaďte sa jeho dokumentáciou k nonce a uistite sa, že CMP a tag manager používajú konzistentný prístup.
Reklamné tagy sťažujú CSP
Programatická reklama načítava skripty a frame z mnohých domén a zoznam sa mení s partnermi na strane dopytu. Vydavatelia zvyčajne volia jednu z dvoch ciest:
- Prísna CSP na stránkach bez programatických reklám a širšia politika tam, kde reklamy bežia.
- Politika zameraná na direktívy, ktoré zostávajú zvládnuteľné, ako
frame-ancestors,object-src 'none'abase-uri, pričom zdroje skriptov zostávajú širšie.
V oboch prípadoch by mal byť CMP na výslovnom zozname povolených, nie pokrytý len zástupným znakom, aby zmena CSP nikdy potichu nevypla banner.
Nasadzujte v režime Report-Only
Najprv použite hlavičku Content-Security-Policy-Report-Only. Prehliadač hlási porušenia bez toho, aby niečo blokoval, takže uvidíte, čo by nová politika pokazila.
- Nasaďte politiku v režime report-only s koncovým bodom na hlásenie.
- Načítajte stránky v čistých profiloch prehliadača a prejdite celý tok súhlasu: prvá návšteva, prijať všetko, odmietnuť všetko, vlastná voľba, odvolanie.
- Skontrolujte hlásenia o porušeniach a konzolu prehliadača, či nie sú zablokované zdroje CMP.
- Upravte politiku a potom prepnite na vynucovanie.
- Po vynucovaní nechajte hlásenia zapnuté, aby ste zachytili regresie.
Príznaky konfliktu s CSP
- Banner sa nikdy nezobrazí a konzola ukazuje porušenie CSP pre skript CMP.
- Banner sa zobrazí, ale bez štýlov, pretože
style-srcblokuje jeho CSS. - Voľby sa neukladajú, pretože
connect-srcblokuje volanie na logovanie súhlasu. - Reklamy alebo analytika sa po súhlase nikdy nenačítajú, pretože vloženým skriptom chýba nonce.
__tcfapije nedefinované, pretože inline stub bol zablokovaný.
Kľúčové poznatky
- Pre svoj CMP skontrolujte
script-src,connect-src,style-src,img-srcaframe-src. - Inline stub povoľte pomocou nonce alebo hashu, nie
'unsafe-inline'. - Zabezpečte, aby skripty vložené po súhlase dostali nonce alebo ich pokrývalo
'strict-dynamic'. - Pred vynucovaním otestujte každú cestu súhlasu v režime report-only.
- Nechajte CMP výslovne na zozname povolených, aby ho zmeny CSP nemohli vypnúť.