Content Security Policy ir jūsų CMP: kaip suderinti CSP ir sutikimą

Du saugumo sluoksniai, kurie turi sutapti

Content Security Policy (CSP) nurodo naršyklei, iš kokių šaltinių puslapis gali įkelti skriptus, stilius, vaizdus, rėmelius ir tinklo užklausas. Sutikimų valdymo platforma atlieka priešingą darbą: pagal vartotojo pasirinkimą sprendžia, kuriems iš tų skriptų leidžiama veikti. Kai abi sukonfigūruojamos atskirai, jos susiduria. CMP neįsikelia, nes CSP jį blokuoja, arba CSP taip atlaisvinama CMP ir reklamos žymių labui, kad nebeapsaugo nieko.

Šiame vadove paaiškinama, kokių CSP direktyvų paprastai reikia CMP, kaip nonce sąveikauja su skriptų įterpimu ir kaip diegti pakeitimus nesugadinant reklamjuostės.

Ko CMP paprastai reikia iš CSP

Tikslūs reikalavimai priklauso nuo tiekėjo, todėl visada pradėkite nuo savo CMP dokumentacijos. Apskritai patikrinkite šias direktyvas:

TCF svetainėse prisiminkite, kad CMP puslapyje taip pat sukuria rėmelį-lokatorių, pavadintą __tcfapiLocator. Šis rėmelis kuriamas be nuotolinio šaltinio, todėl paprastai jam frame-src įrašo nereikia, bet verta tai patvirtinti testuojant.

Inline stubo problema

Dauguma CMP prašo puslapio antraštėje (head) patalpinti mažą inline skriptą — stubą, kad kiti skriptai galėtų eilėje laikyti iškvietimus prieš įsikeliant pagrindiniam CMP. Griežta CSP inline skriptus blokuoja, nebent jų aiškiai neleisite. Turite tris galimybes:

  1. Nonce. Sugeneruokite atsitiktinę reikšmę kiekvienam atsakui, pridėkite ją į CSP antraštę kaip 'nonce-...' ir prie stubo <script> žymės. Tai lanksčiausias variantas dinaminiams puslapiams.
  2. Maiša (hash). Į script-src pridėkite tikslaus stubo turinio SHA-256 maišą. Statinėms svetainėms tai veikia gerai, bet bet koks stubo pakeitimas, net tarpas, jį sugadina.
  3. Savo stubo talpinimas kaip išorinio failo savo domene, padengto 'self'. Reikia pasirūpinti, kad jis įsikeltų pakankamai anksti.

Venkite 'unsafe-inline' kaip sutrumpinimo. Jis leidžia kiekvieną inline skriptą, o tai pašalina didelę dalį CSP teikiamos apsaugos.

Nonce ir CMP įterpiami skriptai

CMP, blokuojantis skriptus iki sutikimo, dažnai veikia juos sulaikydamas ir įterpdamas vėliau. Esant nonce pagrįstai CSP, šiuos įterptus skriptus taip pat reikia leisti. Yra du dažni būdai:

Tą patį klausimą kelia ir žymių valdytuvai. Jei reklamos ir analitikos žymes įkeliate per žymių valdytuvą, laikykitės jo dokumentacijos apie nonce ir įsitikinkite, kad CMP ir žymių valdytuvas naudoja nuoseklų požiūrį.

Reklamos žymės apsunkina CSP

Programinė reklama įkelia skriptus ir rėmelius iš daugelio domenų, o sąrašas keičiasi keičiantis paklausos partneriams. Leidėjai paprastai renkasi vieną iš dviejų kelių:

Bet kuriuo atveju CMP turėtų būti aiškiame leidžiamųjų sąraše, o ne padengtas vien pakaitos simboliu, kad CSP pakeitimas niekada tyliai neišjungtų reklamjuostės.

Diegkite Report-Only režimu

Pirmiausia naudokite Content-Security-Policy-Report-Only antraštę. Naršyklė praneša apie pažeidimus nieko neblokuodama, todėl matote, ką nauja politika sugadintų.

  1. Įdiekite politiką report-only režimu su ataskaitų galiniu tašku.
  2. Įkelkite puslapius švariuose naršyklės profiliuose ir praeikite visą sutikimo eigą: pirmas apsilankymas, priimti viską, atmesti viską, pasirinktinis variantas, atšaukimas.
  3. Peržiūrėkite pažeidimų ataskaitas ir naršyklės konsolę ieškodami užblokuotų CMP išteklių.
  4. Pakoreguokite politiką, tada perjunkite į vykdymą.
  5. Po perjungimo palikite ataskaitas įjungtas, kad pastebėtumėte regresijas.

CSP konflikto simptomai

Pagrindinės išvados

← Tinkladevlaraderegistris Skaityti viską →