Content Security Policy a Twój CMP: jak pogodzić CSP ze zgodą

Dwie warstwy bezpieczeństwa, które muszą się zgadzać

Content Security Policy (CSP) mówi przeglądarce, z jakich źródeł strona może ładować skrypty, style, obrazy, ramki i żądania sieciowe. Platforma zarządzania zgodami robi coś odwrotnego: decyduje, które z tych skryptów mogą działać, zależnie od wyboru użytkownika. Gdy skonfiguruje się je osobno, kolidują. CMP nie ładuje się, bo blokuje go CSP, albo CSP zostaje tak poluzowana na potrzeby CMP i tagów reklamowych, że przestaje cokolwiek chronić.

Ten przewodnik wyjaśnia, jakich dyrektyw CSP zwykle potrzebuje CMP, jak nonce współgrają z wstrzykiwaniem skryptów i jak wdrażać zmiany bez psucia banera.

Czego CMP zwykle potrzebuje od CSP

Dokładne wymagania zależą od dostawcy, więc zawsze zaczynaj od dokumentacji własnego CMP. Ogólnie sprawdź te dyrektywy:

W witrynach z TCF pamiętaj, że CMP tworzy na stronie także ramkę lokalizującą o nazwie __tcfapiLocator. Ramka ta jest tworzona bez zdalnego źródła, więc zwykle nie wymaga wpisu w frame-src, ale warto to potwierdzić w testach.

Problem inline stuba

Większość CMP prosi o umieszczenie w nagłówku strony małego skryptu inline — stuba — aby inne skrypty mogły kolejkować wywołania przed załadowaniem głównego CMP. Restrykcyjna CSP blokuje skrypty inline, o ile ich wyraźnie nie dopuścisz. Masz trzy opcje:

  1. Nonce. Generuj losową wartość dla każdej odpowiedzi, dodaj ją do nagłówka CSP jako 'nonce-...' i do znacznika <script> stuba. To najbardziej elastyczna opcja dla stron dynamicznych.
  2. Hash. Dodaj do script-src skrót SHA-256 dokładnej zawartości stuba. Dobrze działa w witrynach statycznych, ale każda zmiana stuba, nawet w białych znakach, go psuje.
  3. Samodzielne hostowanie stuba jako zewnętrznego pliku na własnej domenie, objętego 'self'. Wymaga to dbałości, by ładował się wystarczająco wcześnie.

Unikaj 'unsafe-inline' jako skrótu. Dopuszcza każdy skrypt inline, co usuwa znaczną część ochrony zapewnianej przez CSP.

Nonce i skrypty wstrzykiwane przez CMP

CMP blokujący skrypty do czasu zgody często działa tak, że wstrzymuje je i wstrzykuje później. Przy CSP opartej na nonce te wstrzyknięte skrypty też trzeba dopuścić. Są dwa typowe podejścia:

To samo pytanie nasuwają menedżery tagów. Jeśli ładujesz tagi reklamowe i analityczne przez menedżera tagów, postępuj zgodnie z jego dokumentacją dotyczącą nonce i upewnij się, że CMP i menedżer tagów stosują spójne podejście.

Tagi reklamowe utrudniają CSP

Reklama programatyczna ładuje skrypty i ramki z wielu domen, a lista zmienia się wraz ze zmianą partnerów popytowych. Wydawcy zwykle wybierają jedno z dwojga:

Tak czy inaczej CMP powinien znajdować się na jawnej liście dozwolonych, a nie być objęty wyłącznie symbolem wieloznacznym, aby zmiana CSP nigdy po cichu nie wyłączyła banera.

Wdrażaj w trybie Report-Only

Najpierw użyj nagłówka Content-Security-Policy-Report-Only. Przeglądarka zgłasza naruszenia, niczego nie blokując, dzięki czemu widzisz, co nowa polityka by zepsuła.

  1. Wdróż politykę w trybie report-only z punktem końcowym raportowania.
  2. Ładuj strony w czystych profilach przeglądarki i przejdź cały przepływ zgody: pierwsza wizyta, akceptuj wszystko, odrzuć wszystko, własny wybór, wycofanie.
  3. Przejrzyj raporty o naruszeniach i konsolę przeglądarki pod kątem zablokowanych zasobów CMP.
  4. Dostosuj politykę, a następnie przełącz na egzekwowanie.
  5. Po przejściu na egzekwowanie zostaw raportowanie włączone, by wychwytywać regresje.

Objawy konfliktu z CSP

Najważniejsze wnioski

← Blog Czytaj wszystko →