CSP без поквареног сајта: прво Report-Only, па тек онда блокирање

|Аутор: Уредништво QUASA|5 мин читања| 1
CSP без поквареног сајта: прво Report-Only, па тек онда блокирање

Строгу Content Security Policy (CSP) најпре пошаљите кроз Content-Security-Policy-Report-Only. Прегледач ће пријављивати кршења предложених правила, али због њих неће блокирати ресурсе; MDN водич за CSP препоручује тај режим за испробавање политике пре примене.

Редослед је: попишите ресурсе и важне радње на сајту, прикупите извештаје, отклоните кршења која потичу од легитимног кода, па проверену политику пошаљите као блокирајуће заглавље. Пријављени домен није сам по себи разлог да га дозволите: заштита од XSS-а зависи од тога којим скриптама дајете поверење.

Попишите ресурсе и корисничке токове

Образац, стилови и уграђени садржај као ресурси које треба пописати пре увођења CSP правила.

Почните од пријављивања, плаћања, слања образаца и страница са спољним интеграцијама. Забележите скрипте, стилове, слике, фонтове, мрежне позиве и уграђене садржаје. Прођите и кроз радње после учитавања странице: неки ресурси се појављују тек после клика или само пријављеним корисницима.

Попис претворите у предлог правила. script-src одређује које скрипте смеју да се извршавају, style-src уређује стилове, connect-src мрежне позиве странице, а form-action одредишта образаца. default-src је резервно правило за многе врсте ресурса, али се не примењује као замена за form-action. Зато засебно проверите где образац шаље податке, нарочито ако плаћање или пријава воде ка другом сервису.

Погледајте и како настаје HTML. Уграђене скрипте, обрађивачи догађаја у атрибутима и употреба eval() захтевају различите измене кода. Додавање домена на листу дозвољених адреса не поправља те обрасце.

Пошаљите пробну политику и примајте извештаје

Report-Only бележи покушај који крши политику док садржај веб-странице остаје доступан.

Следећи пример је условни одговор за сајт на example.com. Сервер мора да замени вредност {NONCE} новом непредвидљивом вредношћу за сваки одговор и да исту вредност постави на одобрене елементе script и style у том документу.

Reporting-Endpoints: csp="https://example.com/csp-reports"

Content-Security-Policy-Report-Only: default-src 'self'; script-src 'nonce-{NONCE}' 'strict-dynamic'; style-src 'self' 'nonce-{NONCE}'; img-src 'self'; connect-src 'self'; form-action 'self'; object-src 'none'; base-uri 'none'; report-uri https://example.com/csp-reports; report-to csp

Овај пример намерно пријављује спољне ресурсе и одредишта образаца која нису наведена. Пре блокирања додајте само она правила за слике, оквире, мрежне позиве или обрасце која су потребна стварним функцијама сајта. Ако део странице користи уграђени стил у HTML атрибуту, nonce на елементу style неће сам решити то кршење.

Спецификација CSP нивоа 3 препоручује обе директиве за извештавање ради компатибилности: прегледач који користи report-to игнорише report-uri. Име csp из пробне политике зато мора бити дефинисано у заглављу Reporting-Endpoints. Пријемник треба да обради оба формата извештаја: старији стиже као application/csp-report, а извештај преко Reporting API као application/reports+json.

Издвојте кварове из буке у извештајима

Извештај је траг, а не налог да проширите политику. Групишите пријаве по страници, прекршеној директиви, ресурсу и верзији политике. Затим поновите радњу која их је изазвала и утврдите да ли припада легитимном току. Тако ћете одвојити скрипту потребну за пријављивање од ресурса који страници није потребан.

Пријемник мора да поднесе налете пријава и да садржај извештаја третира као непоуздан улаз. Извештаји могу садржати адресе страница и ресурса; пре чувања уклоните осетљиве делове адреса и раздвојте тестно окружење од продукције. Ако исти проблем пријављују многе странице, тражите заједнички шаблон или скрипту пре него што мењате правило на свакој страници.

За кршење које настаје при динамичком учитавању одобрене скрипте проверите ланац учитавања и nonce вредност. Застарели додатак странице уклоните или замените ако више нема потребну функцију. Пријаву коју не можете да повежете са радњом задржите за праћење, без широког изузетка. Одсуство пријава не значи да су испробани сви кориснички токови нити гарантује да ће сваки извештај стићи до сервера.

Уклоните unsafe-inline: nonce или hash

Nonce или hash дозвољава одобреној скрипти да ради, док неодобрена скрипта не мења страницу.

За скрипте је циљ да политика верује одређеном коду, уместо читавом домену. OWASP водич за CSP описује строгу политику засновану на nonce или hash вредностима и препоручује испоруку HTTP заглављем. Широки изузетак 'unsafe-inline' поништава важан део контроле над уграђеним скриптама.

Изаберите nonce ако сервер може да генерише нову вредност за сваки одговор и убаци је само у скрипте и стилове којима верујете. Немојте га накнадно додавати сваком елементу script у готовом HTML-у: тако би га могла добити и убризгана скрипта. За статичке странице често је прикладнији hash садржаја одобрене скрипте. Када се садржај промени, мора да се промени и hash у политици; спољној скрипти одобреној на тај начин потребан је и одговарајући атрибут integrity.

Обрађиваче догађаја из HTML атрибута замените регистрованим слушаоцима, а употребу javascript: адреса и eval() уклоните или преправите. Nonce или hash на елементу скрипте не дозвољава аутоматски те обрасце. Ако користите 'strict-dynamic', скрипта која је добила поверење може учитати следеће скрипте; зато проверите како бира њихове адресе из података које прима.

Пређите на блокирање по деловима сајта

Поновите важне токове у прегледачима које користе посетиоци сајта. Проверите изглед, пријављивање, слање образаца, мрежне позиве и интеграције, укључујући странице које се разликују за пријављене кориснике. Пре преласка решите легитимна кршења изменом кода или прецизним правилом и утврдите узрок преосталих пријава.

Затим проверену политику пошаљите као Content-Security-Policy најпре на ограниченом делу сајта. Пратите стварне грешке и неуспеле радње: у овом режиму кршење већ може променити понашање странице. Истовремено можете задржати строжу политику у заглављу Content-Security-Policy-Report-Only да испитате наредну измену без њеног спровођења.

Ако легитиман ток престане да ради, вратите претходну проверену политику, отклоните узрок и поново испробајте измену кроз пријављивање. И када блокирање ради, CSP остаје додатни слој против XSS-а; безбедно обрађивање и приказ корисничког уноса и даље су потребни.

Прочитајте и:

Подели:

Претплатите се на наш билтен

Добијајте најновије вести о Web3, AI-у и криптовалутама директно у пријемно сандуче.

0