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 казва на браузъра от кои източници една страница може да зарежда скриптове, стилове, изображения, шрифтове, рамки и връзки. Основната ѝ задача е да ограничава междусайтовите скриптове (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, е пример: вашият сървър или framework трябва да генерира собствен. Хешът покрива точните байтове на вградения код, така че преформатирането на скрипта изисква нов хеш.

Хедър, 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, а meta таг за Report-Only няма. Инструментът премахва тези директиви от тага и ви го съобщава.

Често задавани въпроси

Проблем ли е '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 хедъра, ресурсът трябва да отговаря на всички. Поставяйте по една политика в оценителя.