Content Security Policy і ваш CMP: як прымусіць CSP і згоду працаваць разам

Два ўзроўні абароны, якія павінны ўзгадняцца

Content Security Policy (CSP) паведамляе браўзеру, з якіх крыніц старонцы дазволена загружаць скрыпты, стылі, выявы, фрэймы і сеткавыя запыты. Платформа кіравання згодай выконвае процілеглую задачу: яна вырашае, якія з гэтых скрыптоў можна запускаць, зыходзячы з выбару карыстальніка. Калі наладжваць іх паасобку, яны сутыкаюцца. CMP не загружаецца, бо CSP яго блакуе, або CSP аслабляюць так моцна дзеля CMP і рэкламных тэгаў, што яна ўжо нічога не абараняе.

У гэтым кіраўніцтве тлумачыцца, якія дырэктывы CSP звычайна патрэбны CMP, як nonce ўзаемадзейнічаюць з укараненнем скрыптоў і як уносіць змены, не ламаючы банер.

Што CMP звычайна патрэбна ад CSP

Дакладныя патрабаванні залежаць ад вендара, таму заўсёды пачынайце з уласнай дакументацыі вашага CMP. Увогуле праверце такія дырэктывы:

На сайтах з TCF памятайце, што CMP таксама стварае на старонцы фрэйм-лакатар з імем __tcfapiLocator. Гэты фрэйм ствараецца без аддаленай крыніцы, таму запісу ў frame-src яму звычайна не патрэбна, але гэта варта пацвердзіць падчас тэсціравання.

Праблема ўбудаванай заглушкі

Большасць CMP просяць разместіць у head старонкі невялікі ўбудаваны скрыпт — заглушку, — каб іншыя скрыпты маглі ставіць выклікі ў чаргу да загрузкі асноўнага CMP. Строгая CSP блакуе ўбудаваныя скрыпты, калі відавочна іх не дазволіць. Ёсць тры варыянты:

  1. Nonce. Генеруйце выпадковае значэнне для кожнага адказу, дадавайце яго ў загаловак CSP як 'nonce-...' і ў тэг <script> заглушкі. Гэта найбольш гібкі варыянт для дынамічных старонак.
  2. Хэш. Дадайце SHA-256-хэш дакладнага змесціва заглушкі ў script-src. Гэта добра працуе для статычных сайтаў, але любая змена заглушкі, нават прабелу, яго ламае.
  3. Размяшчэнне заглушкі ў сябе як вонкавага файла на вашым дамене, які пакрываецца 'self'. Тут патрэбна асцярожнасць, каб яна па-ранейшаму загружалася дастаткова рана.

Пазбягайце 'unsafe-inline' як лёгкага шляху. Ён дазваляе любыя ўбудаваныя скрыпты, што здымае большую частку абароны, якую дае CSP.

Nonce і скрыпты, якія ўкараняе CMP

CMP, які блакуе скрыпты да атрымання згоды, часта працуе так: утрымлівае іх і ўкараняе пазней. Пры CSP на аснове nonce гэтыя ўкараняемыя скрыпты таксама павінны быць дазволеныя. Ёсць два распаўсюджаныя падыходы:

Менеджары тэгаў узнімаюць тое самае пытанне. Калі вы загружаеце рэкламныя і аналітычныя тэгі праз менеджар тэгаў, прытрымлівайцеся яго дакументацыі па nonce і пераканайцеся, што CMP і менеджар тэгаў выкарыстоўваюць узгоднены падыход.

Рэкламныя тэгі ўскладняюць CSP

Праграматык-рэклама загружае скрыпты і фрэймы з многіх даменаў, а спіс змяняецца разам з партнёрамі па попыце. Выдаўцы звычайна абіраюць адно з двух:

У любым выпадку CMP павінен быць у відавочным спісе дазволеных, а не пакрывацца толькі шаблонам-падстаноўкай, каб змена CSP ніколі не адключыла банер незаўважна.

Укараняйце праз рэжым Report-Only

Спачатку выкарыстайце загаловак Content-Security-Policy-Report-Only. Браўзер паведамляе пра парушэнні, нічога не блакуючы, таму вы бачыце, што зламала б новая палітыка.

  1. Разгарніце палітыку ў рэжыме report-only з канчатковай кропкай для справаздач.
  2. Загружайце старонкі ў чыстых профілях браўзера і прайдзіце ўвесь сцэнарый згоды: першы візіт, прыняць усё, адхіліць усё, уласны выбар, адклік.
  3. Вывучыце справаздачы пра парушэнні і кансоль браўзера на прадмет заблакаваных рэсурсаў CMP.
  4. Скарыгуйце палітыку, потым пераключыцеся на прымусовае прымяненне.
  5. Пакіньце справаздачы ўключанымі і пасля ўключэння прымянення, каб лавіць рэгрэсіі.

Сімптомы канфлікту з CSP

Галоўныя высновы

← Блог Чытаць усё →