Проверьте Content-Security-Policy директиву за директивой и узнайте, как скрипты её обходят
Работает в вашем браузере. Ничего из того, что вы вводите, никуда не отправляется. Проверено 16 октября 2026 г..Content-Security-Policy сообщает браузеру, откуда можно загружать скрипты и другое содержимое. Она защищает от внедрённых скриптов, только если script-src обходится без 'unsafe-inline', подстановочных знаков и обходимых хостов, object-src равен 'none', а base-uri ограничен. Исследование Google 2016 года показало, что 94.7% реальных политик можно было обойти; nonce вместе с 'strict-dynamic' решают эту проблему.
Эта страница переведена машинным способом с английского оригинала. Перевод ещё не проверен человеком, поэтому ориентируйтесь на английскую версию. Читать английский оригинал
Вставьте политику, всю строку заголовка Content-Security-Policy или тег <meta>, в котором она задана.
Прочитайте замечания, начиная с самых серьёзных: каждое называет директиву и то, что злоумышленник мог бы с ней сделать.
Проверьте в таблице директив имена с опечатками и источники, которые браузер проигнорирует.
Исправьте политику или начните со строгого шаблона и вставьте её снова, пока не останутся только примечания.
В Content-Security-Policy легко допустить незаметную ошибку, а браузеры никогда не жалуются: директива, которую они не могут прочитать, просто игнорируется. Этот инструмент читает политику ровно так, как по спецификации CSP Level 3 это делает браузер, а затем оценивает её по выводам исследования реальных политик, проведённого Google в 2016 году.
Замечания, начиная с самых серьёзных.
| Уровень | Примеры |
|---|---|
| Высокий | 'unsafe-inline' без nonce, * или https: в script-src, object-src не 'none', 'strict-dynamic' без nonce, пропущенная точка с запятой, self без кавычек |
| Средний | 'unsafe-eval', разрешённые хосты, известные раздачей JSONP или старого AngularJS, открытый base-uri, источники по обычному http, неизвестные директивы |
| Низкий | нет frame-ancestors, короткие nonce, устаревшие директивы, дубликаты, 'unsafe-inline' для стилей |
| Примечание | нет отчётов, report-uri без report-to, источники, которые браузеры игнорируют при строгой политике |
Учитывается резервная директива. Если script-src отсутствует, вместо неё оценивается default-src; если нет обеих, скрипты можно загружать откуда угодно, и инструмент об этом сообщает.
Вставляйте что угодно. Саму политику, всю строку заголовка или тег <meta http-equiv>. Политики, заданные в теге meta, не могут использовать frame-ancestors, report-uri и sandbox, и инструмент это отмечает. Заголовок с несколькими политиками через запятую разбивается на части, поскольку применяется каждая из них.
Проверяется каждый источник. Ключевые слова, nonce, хеши (с правильной длиной для SHA-256, 384 или 512), схемы и хосты проверяются по грамматике, а для директивы с опечаткой предлагается исправление, например frame-ancestor на frame-ancestors.
Строгий шаблон. Одно нажатие загружает политику на основе nonce: script-src с nonce и 'strict-dynamic', object-src 'none' и base-uri 'none'. Ваш сервер должен в каждом ответе записывать новый случайный nonce в заголовок и в каждый тег script.
Политика читается в вашем браузере и никуда не отправляется. Чтобы получить заголовки, которые отдаёт работающий сайт, используйте HTTP Headers Checker.
Нет. С 'unsafe-inline' выполняется любой скрипт, который злоумышленнику удастся внедрить в страницу, а именно это Content-Security-Policy и должна предотвращать. Вместо этого используйте nonce или хеш для каждого встроенного скрипта. Когда присутствует nonce или хеш, современные браузеры игнорируют 'unsafe-inline', поэтому оставить его как запасной вариант для старых браузеров безвредно.
Ключевое слово 'strict-dynamic' позволяет скрипту, которому доверяют благодаря nonce или хешу, загружать другие скрипты, а списки разрешённых хостов и https: браузеры с его поддержкой игнорируют. Вместе с nonce это даёт политику, которая одновременно строгая и простая во внедрении. Без какого-либо nonce или хеша она блокирует все скрипты.
Плагины, загружаемые тегами object или embed, могут выполнять скрипты вне правил script-src, а старые файлы Flash на разрешённых хостах были распространённым способом обхода. Плагины сейчас нужны немногим сайтам, поэтому object-src 'none' закрывает весь этот путь. Если object-src отсутствует, действует default-src, который часто не равен 'none'.
Популярные хосты скриптов, такие как крупные CDN и некоторые домены Google, отдают JSONP-эндпоинты или старые версии AngularJS. Злоумышленник, способный внедрить разметку, может загрузить эти разрешённые файлы, чтобы выполнить свой код. Исследование Google 2016 года показало, что 94.7% реальных политик на основе списков хостов можно было обойти таким способом; nonce вместе с 'strict-dynamic' позволяют избежать проблемы.
Браузер игнорирует директиву и выводит предупреждение в консоль, но остальная политика продолжает действовать, так что страница незаметно теряет эту защиту. Опечатка вроде frame-ancestor вместо frame-ancestors оставляет страницу открытой для кликджекинга. Этот инструмент перечисляет неизвестные директивы и предлагает имя, которое вы, вероятно, имели в виду.
Да, с помощью тега meta http-equiv в head страницы, но три директивы там не работают: frame-ancestors, report-uri и sandbox. Кроме того, политики в теге meta применяются только к содержимому после тега. Отправка политики в HTTP-заголовке ответа — надёжный вариант; тег meta подходит для статического хостинга без управления заголовками.
Ставки и правила меняются; проверьте источник, прежде чем полагаться на цифру.
Всё ещё не получается? Задайте вопрос об инструменте «Проверка CSP» и ответить может любой, кто знает. Учётная запись не нужна.