Utilia

Генератор на Content Security Policy (CSP)

Направете Content-Security-Policy заглавие, meta таг и Report-Only верзија со шаблони, nonce и SHA-256 хешеви и проверете постојна политика.

Започнете од готов шаблон

Google адресите се примери од упатствата на Google за CSP со Google tag. Google ги менува од време на време: проверете ја актуелната документација и отстранете го она што не го користите.

Директиви

Извори одделени со празно место. Оставете го полето празно за да ја изоставите директивата (директивите за преземање тогаш се враќаат на default-src).

Брзо додавање

Nonce мора да биде нова случајна вредност при секој одговор, создадена од вашиот сервер и повторена во секој <script nonce="…">. Фиксен nonce не штити од ништо.

Хеш на вграден скрипт или стил

Хешот го опфаќа точниот текст меѓу таговите, вклучувајќи празни места и преломи на редови: секоја промена бара нов хеш. Вградените обработувачи на настани (onclick=…) бараат и 'unsafe-hashes'.

Извештаи за прекршувања

Додава report-uri (постари прелистувачи) и report-to со заглавие Reporting-Endpoints.

Во <meta> таг прелистувачите ги игнорираат frame-ancestors, report-uri, report-to и sandbox, а Report-Only не е поддржан. Ставете го тагот на врвот од <head>: важи само за содржината по него.

Преглед на оваа политика

Оценете постојна политика

Како да изградите политика

  1. Под Започнете од готов шаблон изберете почетна точка: Строга (nonce + strict-dynamic), Заклучена статична страница, Типична веб-страница или Типична + Google Analytics / Ads. Уредникот се отвора со шаблонот за типична веб-страница.
  2. Прилагодете ги Директивите. Секое поле прима извори одделени со празно место; празно поле ја изоставува директивата.
  3. Со Брзо додавање додадете клучен збор во избраната Директива: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Додај nonce вметнува случаен 128-битен nonce.
  4. За да дозволите определен вграден скрипт без 'unsafe-inline', залепете го (или HTML-от околу него) во Хеш на вграден скрипт или стил и кликнете Пресметај SHA-256 и додај.
  5. Штиклирајте upgrade-insecure-requests ако некои стари адреси сè уште користат http://, а по желба внесете URL на крајната точка за извештаи.
  6. Копирајте го HTTP заглавието, Report-Only заглавието или HTML тагот. Прегледот на оваа политика се освежува додека пишувате.

За да проверите политика што веќе ја имате, залепете ја под Оценете постојна политика и кликнете Оцени ја политиката; Вчитај во уредникот ја копира во полињата.

Што прави Content Security Policy

CSP му кажува на прелистувачот од кои извори една страница смее да вчитува скрипти, стилови, слики, фонтови, рамки и врски. Главната намена е да го ограничи cross-site scripting (XSS): дури и ако напаѓач вметне код во вашата страница, добрата политика спречува вметнатиот скрипт да се изврши. Исто така контролира кој смее да ја вгради вашата страница (frame-ancestors), каде смеат да се испраќаат формулари (form-action) и на што може да укажува <base> (base-uri).

Директивите за преземање, како img-src или font-src, се враќаат на default-src кога недостасуваат. base-uri, form-action и frame-ancestors не се враќаат на неа, па затоа прегледот експлицитно ги бара.

Nonce, хешеви и strict-dynamic

Дозволувањето домаќини (script-src https://cdn.example.com) изгледа безбедно, но често може да се заобиколи: големите домени имаат JSONP крајни точки и стари библиотеки што напаѓачот може да ги искористи. Пристапот што го препорачуваат безбедносните тимови на прелистувачите е строга CSP: секој легитимен <script> носи nonce што серверот го создава за секој одговор или е дозволен преку својот хеш, а 'strict-dynamic' им овозможува на тие доверливи скрипти да ги вчитаат скриптите што им се потребни. Во таква поставеност https: и 'unsafe-inline' се само резерва за многу стари прелистувачи; современите ги игнорираат.

Nonce работи само ако се менува при секој одговор и е непредвидлив. Оној вметнат со Додај nonce е пример: вашиот сервер или рамка мора да создаде свој. Хешот го опфаќа точниот садржај на вградениот код, па преформатирањето на скриптот бара нов хеш.

Заглавие, Report-Only и meta таг

Испратете ја политиката како HTTP заглавие секогаш кога можете. Прво поставете ја како Content-Security-Policy-Report-Only: прелистувачите пријавуваат прекршувања (во конзолата и до вашата крајна точка, ако сте поставиле) без ништо да блокираат, па можете да ги поправите страниците пред да ја наметнете политиката. Поставките за извештаи додаваат report-uri за постарите прелистувачи и report-to со заглавие Reporting-Endpoints.

Верзијата со <meta http-equiv> е практична на статичен хостинг, но прелистувачите ги игнорираат frame-ancestors, report-uri, report-to и sandbox во неа, а Report-Only meta таг не постои. Алатката ги отстранува тие директиви од тагот и го кажува тоа.

Сè се одвива во вашиот прелистувач: политиките и кодот што ги залепувате не се испраќаат на сервер.

Често поставувани прашања

Дали 'unsafe-inline' во style-src е проблем?

Помалку е опасно отколку во script-src и е многу вообичаено, бидејќи многу библиотеки поставуваат вградени стилови. Вметнат CSS сепак може да ја оштети страницата или да протече податоци, па прегледот го наведува со ниска сериозност.

Дали адресите на Google Analytics се целосни?

Тоа се примери од упатствата на Google за CSP со Google tag. Google ги прилагодува со времето, а може да бидат потребни и регионални домени; проверете ја актуелната документација на Google и отстранете го она што не го користите. Вградениот gtag.js исечок бара nonce или хеш.

Зошто мојата политика ги блокира сопствените вградени скрипти?

Штом script-src е поставен без 'unsafe-inline', секој вграден <script> и атрибут onclick= е блокиран. Преместете го кодот во датотека или додајте nonce или хеш.

Дали CSP го заменува ескејпирањето на внесот од корисници?

Не. CSP е втора линија на одбрана. Продолжете да го ескејпирате излезот и да го валидирате внесот; политиката ја ограничува штетата кога нешто ќе помине.

Можам ли да имам повеќе политики?

Да: ако страницата прима повеќе CSP заглавија, ресурсот мора да ги исполнува сите. Во алатката за оценување залепувајте по една политика.