Content Security Policy și CMP-ul tău: cum faci CSP și consimțământul să funcționeze împreună

Două straturi de securitate care trebuie să se înțeleagă

O Content Security Policy (CSP) îi spune browserului din ce surse poate o pagină să încarce scripturi, stiluri, imagini, cadre și cereri de rețea. O platformă de gestionare a consimțământului face treaba opusă: decide care dintre acele scripturi au voie să ruleze în funcție de alegerea utilizatorului. Când sunt configurate separat, se ciocnesc. CMP-ul nu se încarcă pentru că CSP îl blochează sau CSP este relaxată atât de mult pentru a găzdui CMP-ul și tagurile de reclame încât nu mai protejează nimic.

Acest ghid explică ce directive CSP are de obicei nevoie un CMP, cum interacționează nonce-urile cu injectarea de scripturi și cum faci modificări fără să strici bannerul.

Ce are de obicei nevoie un CMP de la CSP

Cerințele exacte depind de furnizor, așa că pornește mereu de la documentația propriului CMP. În general, verifică aceste directive:

Pe site-urile cu TCF, nu uita că CMP-ul creează în pagină și un cadru de localizare numit __tcfapiLocator. Acel cadru este creat fără sursă la distanță, deci în mod normal nu are nevoie de o intrare în frame-src, dar merită confirmat la testare.

Problema stub-ului inline

Majoritatea CMP-urilor îți cer să pui un mic script inline — stub-ul — în head-ul paginii, astfel încât alte scripturi să poată pune apeluri în coadă înainte să se încarce CMP-ul principal. O CSP strictă blochează scripturile inline, dacă nu le permiți explicit. Ai trei opțiuni:

  1. Un nonce. Generează o valoare aleatorie pentru fiecare răspuns, adaug-o în antetul CSP ca 'nonce-...' și în eticheta <script> a stub-ului. Aceasta este cea mai flexibilă opțiune pentru paginile dinamice.
  2. Un hash. Adaugă hash-ul SHA-256 al conținutului exact al stub-ului în script-src. Funcționează bine pentru site-uri statice, dar orice modificare a stub-ului, chiar și de spații, îl strică.
  3. Găzduirea proprie a stub-ului ca fișier extern pe propriul tău domeniu, acoperit de 'self'. Necesită grijă pentru ca fișierul să se încarce suficient de devreme.

Evită 'unsafe-inline' ca scurtătură. Permite toate scripturile inline, ceea ce elimină o bună parte din protecția oferită de CSP.

Nonce-uri și scripturile injectate de CMP

Un CMP care blochează scripturile până la consimțământ funcționează adesea ținându-le în așteptare și injectându-le mai târziu. Sub o CSP bazată pe nonce, și acele scripturi injectate trebuie permise. Există două abordări frecvente:

Managerii de taguri ridică aceeași întrebare. Dacă încarci tagurile de reclame și de analitică printr-un manager de taguri, urmează documentația acestuia despre nonce-uri și asigură-te că CMP-ul și managerul de taguri folosesc o abordare consecventă.

Tagurile de reclame fac CSP mai dificilă

Publicitatea programatică încarcă scripturi și cadre din multe domenii, iar lista se schimbă pe măsură ce se schimbă partenerii de cerere. Editorii fac de obicei una dintre cele două alegeri:

Oricum, CMP-ul ar trebui să fie pe lista explicită de permisiuni, nu acoperit doar de un wildcard, astfel încât o modificare a CSP să nu dezactiveze niciodată pe tăcute bannerul.

Lansează cu modul doar-raportare

Folosește mai întâi antetul Content-Security-Policy-Report-Only. Browserul raportează încălcările fără să blocheze nimic, astfel încât poți vedea ce ar strica o politică nouă.

  1. Implementează politica în modul doar-raportare, cu un punct final de raportare.
  2. Încarcă pagini în profiluri de browser curate și parcurge întregul flux de consimțământ: prima vizită, acceptă tot, refuză tot, alegere personalizată, retragere.
  3. Examinează rapoartele de încălcări și consola browserului pentru resurse CMP blocate.
  4. Ajustează politica, apoi treci la aplicarea efectivă.
  5. Păstrează raportarea activă și după aplicare, pentru a prinde regresiile.

Simptomele unui conflict CSP

Concluzii-cheie

← Blog Citește tot →