Политика безопасности контента
Политика безопасности контента ( CSP ) — это стандарт компьютерной безопасности, введенный для предотвращения межсайтового скриптинга (XSS), кликджекинга и других атак путем внедрения кода , возникающих в результате выполнения вредоносного контента в контексте доверенной веб-страницы . [1] Это кандидат в рекомендации рабочей группы W3C по безопасности веб-приложений. [2] широко поддерживается современными веб-браузерами . [3] CSP предоставляет владельцам веб-сайтов стандартный метод объявления утвержденного происхождения контента, который браузерам должно быть разрешено загружать на этот веб-сайт. Охватываемыми типами являются JavaScript , CSS , HTML-фреймы , веб-работники , шрифты , изображения, встраиваемые объекты, такие как Java-апплеты , ActiveX. , аудио- и видеофайлы и другие HTML5 функции .
Статус [ править ]
Стандарт, первоначально называвшийся Content Restrictions, был предложен Робертом Хансеном в 2004 году. [4] впервые реализовано в Firefox 4 и быстро подхвачено другими браузерами. Версия 1 стандарта была опубликована в 2012 году как рекомендация кандидата W3C. [5] и быстро с дальнейшими версиями (уровень 2), опубликованными в 2014 году. По состоянию на 2023 год. [update], проект уровня 3 разрабатывается с новыми функциями, которые быстро адаптируются веб-браузерами. [6]
Следующие имена заголовков используются как часть экспериментальных реализаций CSP: [3]
Content-Security-Policy
– стандартное имя заголовка, предложенное документом W3C. Google Chrome поддерживает это начиная с версии 25. [7] Firefox поддерживает это начиная с версии 23, [8] выпущен 6 августа 2013 года. [9] WebKit поддерживает это начиная с версии 528 (ночная сборка). [10] на базе Chromium Поддержка Microsoft Edge аналогична поддержке Chrome. [11]X-WebKit-CSP
— устаревший экспериментальный заголовок, представленный в Google Chrome , Safari и других веб-браузерах на основе WebKit в 2011 году. [12]X-Content-Security-Policy
– устаревший экспериментальный заголовок, представленный в браузерах на базе Gecko 2 (от Firefox 4 до Firefox 22, Thunderbird 3.3, SeaMonkey 2.1). [13]
Веб-сайт может объявлять несколько заголовков CSP, а также смешивать заголовки принудительного исполнения и только для отчетов. Каждый заголовок будет обрабатываться браузером отдельно.
CSP также можно доставить в HTML-коде с помощью HTML-тега META , хотя в этом случае его эффективность будет ограничена. [14]
Internet Explorer 10 и Internet Explorer 11 также поддерживают CSP, но только директиву песочницы, используя экспериментальную X-Content-Security-Policy
заголовок. [15]
Ряд фреймворков веб-приложений поддерживают CSP, например AngularJS. [16] (изначально) и Django (промежуточное ПО). [17] Инструкции для Ruby on Rails опубликованы на GitHub . [18] Однако поддержка веб-платформы требуется только в том случае, если содержимое CSP каким-либо образом зависит от состояния веб-приложения, например, от использования nonce
источник. В противном случае CSP довольно статичен и может доставляться с уровней веб-приложения над приложением, например, на балансировщике нагрузки или веб-сервере .
Обходит [ править ]
В декабре 2015 года [19] и декабрь 2016 г., [20] несколько способов обхода 'nonce'
были опубликованы источники разрешенных списков. В январе 2016 года [21] был опубликован другой метод, который использует список разрешений CSP на уровне сервера для использования старых и уязвимых версий библиотек JavaScript, размещенных на том же сервере (частый случай с серверами CDN). В мае 2017 года [22] был опубликован еще один метод обхода CSP с использованием кода фреймворков веб-приложений.
Режим работы [ править ]

Если Content-Security-Policy
заголовок присутствует в ответе сервера, совместимый клиент применяет политику декларативного списка разрешенных. Одной из целей политики является более строгий режим выполнения JavaScript для предотвращения определенных атак с использованием межсайтовых сценариев. На практике это означает, что ряд функций отключен по умолчанию:
- Встроенный JavaScript код [а]
<script>
блоки, [б]- Обработчики событий DOM как атрибуты HTML (например,
onclick
) - The
javascript:
ссылки
- Встроенные CSS операторы
<style>
блокировать [б]style
относится к элементам HTML
- Динамическая JavaScript оценка кода [с]
eval()
- строковые аргументы для
setTimeout
иsetInterval
функции new Function()
конструктор
- Динамические CSS операторы
CSSStyleSheet.insertRule()
метод
Хотя использование CSP в новом приложении может быть довольно простым, особенно с CSP-совместимой JavaScript , средой [д] существующие приложения могут потребовать некоторого рефакторинга или смягчения политики. Рекомендуемая практика написания кода для CSP-совместимых веб-приложений — загрузка кода из внешних исходных файлов ( <script src>
), анализируйте JSON вместо его оценки и используйте EventTarget.addEventListener()
установить обработчики событий. [23]
Примечания [ править ]
- ^ Это поведение можно отключить глобально с помощью специального
'unsafe-inline'
заявление - ↑ Перейти обратно: Перейти обратно: а б Доверенный встроенный
<script>
и<style>
блоки могут быть индивидуально включены в список разрешенных в CSP с помощьюnonce
илиhash
заявления. - ^ Это поведение можно отключить глобально с помощью специального
'unsafe-eval'
заявление - ^ Например, AngularJS требует только одного флага инициализации для переключения в режим совместимости с CSP —
<html ng-app ng-csp>
Отчетность [ править ]
Каждый раз, когда запрошенный ресурс или выполнение скрипта нарушает политику, браузер запускает POST
запрос на значение, указанное в report-uri
[24] или report-to
[25] содержащее подробности нарушения.
Отчеты CSP представляют собой стандартные структуры JSON приложения . и могут быть получены с помощью собственного API [26] или общедоступные получатели отчетов CSP. [ нужна ссылка ]
В 2018 году исследователи безопасности показали, как отправлять ложноположительные отчеты назначенному получателю, указанному в report-uri
. Это позволяет потенциальным злоумышленникам произвольно активировать эти сигналы тревоги и может сделать их менее полезными в случае реальной атаки. [27] Такое поведение является запланированным и не может быть исправлено, поскольку отчеты отправляет браузер (клиент).
Исключение надстроек и расширений браузера [ править ]
Согласно исходной модели обработки CSP (1.0) (2012–2013 гг.), [28] CSP не должен мешать работе надстроек или расширений браузера, установленных пользователем. Эта функция CSP фактически позволила бы любому дополнению, расширению или букмарклету внедрять скрипты на веб-сайты, независимо от происхождения этого скрипта, и, таким образом, быть освобожденным от политик CSP.
Однако с тех пор эта политика была изменена (начиная с CSP 1.1). [29] ) в следующей формулировке. Обратите внимание на использование слова «может» вместо предшествующей абсолютной формулировки «следует (не)»:
Примечание. Пользовательские агенты могут разрешать пользователям изменять или обходить применение политики с помощью пользовательских настроек, букмарклетов, сторонних дополнений к пользовательскому агенту и других подобных механизмов.
Абсолютная формулировка «следует» использовалась пользователями браузеров для запроса/требования соблюдения политики и установки изменений в популярных браузерах (Firefox, Chrome, Safari) для ее поддержки. Это стало особенно спорным, когда такие сайты, как Twitter и GitHub, начали использовать строгие политики CSP, которые «препятствовали» использованию букмарклетов. [30]
Рабочая группа W3C по безопасности веб-приложений считает такой сценарий частью доверенной вычислительной базы, реализованной браузером; заявил рабочей группе однако представитель Cox Communications , что это исключение является потенциальной дырой в безопасности, которая может быть использована вредоносными или скомпрометированными надстройками или расширениями. [31] [32]
меры Дополнительные
По состоянию на 2015 год [update] W3C предлагает ряд новых стандартов безопасности браузеров, большинство из которых дополняют CSP: [33]
- Целостность подресурсов ( SRI ), обеспечивающая только известных и надежных файлов ресурсов (обычно JavaScript , CSS ). загрузку со сторонних серверов (обычно CDN )
- Смешанный контент , чтобы уточнить политику предполагаемого браузера на страницах, загружаемых через HTTPS , и связывание контента через открытый текст HTTP.
- Обновление небезопасных запросов , подсказывающее браузерам, как обрабатывать устаревшие ссылки на страницах, перенесенных на HTTPS.
- Управление учетными данными , унифицированный JavaScript API для доступа к учетным данным пользователя и упрощения сложных схем входа в систему.
- Referrer Policy , расширение CSP, указывающее браузеру на создание заголовков Referer . [33]
См. также [ править ]
- Политика одного и того же происхождения
- NoScript — защита от XSS и Application Boundaries Enforcer (ABE), расширение для Firefox. [34] [35]
- HTTP Switchboard – определяемые пользователем правила CSP, расширение для Google Chrome. [36] и Опера [37]
- Строгая транспортная безопасность HTTP
- Закрепление открытого ключа HTTP
Ссылки [ править ]
- ^ Сид Стамм (11 марта 2009 г.). «Безопасность/CSP/Спецификации — MozillaWiki» . Wiki.mozilla.org . Проверено 29 июня 2011 г.
Политика безопасности контента призвана помочь веб-дизайнерам или администраторам серверов указать, как контент взаимодействует на их веб-сайтах. Это помогает смягчать и обнаруживать такие типы атак, как XSS и внедрение данных.
- ^ «Состояние проекта» . 13 сентября 2016 г. Проверено 5 октября 2016 г.
- ↑ Перейти обратно: Перейти обратно: а б «Могу ли я использовать Политику безопасности контента?» . Фирд . Проверено 22 февраля 2013 г.
- ^ Роберт Хансен (1 июня 2009 г.). «Политика безопасности контента Mozilla» . Архивировано из оригинала 18 марта 2015 года . Проверено 29 июня 2011 г.
Ограничения контента — способ веб-сайтов сообщить браузеру о необходимости повысить безопасность на страницах, где сайт знает, что контент отправлен пользователем и, следовательно, потенциально опасен.
- ^ «Политика безопасности контента 1.0» . W3C . Проверено 13 ноября 2015 г.
- ^ «Политика безопасности контента, уровень 3» . W3C . Проверено 5 мая 2023 г.
- ^ «Бета-версия Chrome 25: политика безопасности контента и теневое DOM» . Google. 14 января 2013 года . Проверено 22 февраля 2013 г.
- ^ «Политика безопасности контента 1.0 появилась в Firefox Aurora» . Фонд Мозилла. 29 мая 2013 года . Проверено 16 июня 2013 г.
- ^ «Быстрый выпуск/Календарь» . Фонд Мозилла. 29 мая 2013 года . Проверено 16 июня 2013 г.
- ^ «Ошибка 96765 — реализация заголовка Content-Security-Policy» . ВебКит. 31 октября 2012 года . Проверено 7 августа 2015 г.
- ^ «Политика безопасности контента (CSP)» . Майкрософт . Проверено 6 февраля 2020 г.
- ^ «Новые функции безопасности Chromium, июнь 2011 г.» . Google. 14 июня 2011 года . Проверено 22 февраля 2013 г.
- ^ «Представляем политику безопасности контента» . Фонд Мозилла . Проверено 22 февраля 2013 г.
- ^ «HTML META-элемент» . Политика безопасности контента уровня 2 . W3C . Проверено 14 ноября 2015 г.
- ^ «Глубокая защита: блокировка гибридных веб-приложений с помощью песочницы HTML5» . Группа разработчиков Windows Internet Explorer . Проверено 13 апреля 2014 г.
- ^ «директива ngCsp» . АнгулярJS . Проверено 27 октября 2020 г.
- ^ «Джанго-безопасность» . Гитхаб . 21 ноября 2022 г.
- ^ «Политика безопасности контента» . Гитхаб. 19 апреля 2013 г.
- ^ «ЦСП 2015» . XSS-головоломка. 23 ноября 2015 г. Архивировано из оригинала 20 декабря 2015 г. Проверено 12 декабря 2015 г.
- ^ Лекиес, Себастьян. «Сборник обходов CSP» . Проверено 5 июня 2017 г.
- ^ «Оскорбительные отношения с AngularJS» . 12 декабря 2015 года . Проверено 5 января 2016 г.
- ^ OWASP (25 мая 2017 г.), AppSec EU, 2017 г. Не доверяйте DOM: обход средств защиты от XSS с помощью гаджетов сценариев, автор: Себастьян Лекиес , получено 5 июня 2017 г.
- ^ Уэст, Майк (15 июня 2012 г.). «Введение в политику безопасности контента» . HTML5 рок . Проверено 22 февраля 2013 г.
- ^ «Политика безопасности контента, уровень 3» . www.w3.org . Проверено 12 января 2021 г.
- ^ «CSP: отчет — HTTP | MDN» . http://developer.mozilla.org . Проверено 25 января 2021 г.
- ^ Например, в Django приемник CSP доступен в модуле django-security .
- ^ «Вспышка синей команды: когда вы их сбиваете с толку, вы их теряете» . Секрет . 04.11.2018 . Проверено 27 декабря 2019 г.
- ^ «Модель обработки CSP» . 15 ноября 2012 г. Проверено 6 октября 2013 г.
- ^ «CSP 1.1: Добавьте ненормативный язык для расширений» . GitHub w3c webappsec . Гитхаб. 27 февраля 2014 г. Проверено 14 сентября 2016 г.
- ^ «Ошибка 866522 — Букмарклеты, на которые влияет CSP» . Багзилла . Мозилла. 28 апреля 2013 г. Проверено 14 сентября 2016 г.
- ^ «Отмена политик CSP для надстроек (расширений) браузера» . 25 сентября 2013 г. Проверено 6 октября 2013 г.
- ^ «Re: [CSP] Запрос на изменение предложения букмарклета/расширения в CSP1.1» . 03.08.2014 . Проверено 8 октября 2015 г.
- ↑ Перейти обратно: Перейти обратно: а б «Рабочая группа по безопасности веб-приложений» . Гитхаб . Проверено 13 ноября 2015 г.
- ^ «Дополнение пакета безопасности Noscript для Firefox» . addons.mozilla.org . Проверено 11 июня 2017 г.
- ^ «Расширение NoScript Firefox — Официальный сайт» . noscript.net . Проверено 11 июня 2017 г.
- ^ «HTTP-коммутатор для Chrome» . chrome.google.com . Архивировано из оригинала 17 августа 2014 г.
- ^ «HTTP-коммутатор для Opera» . addons.opera.com . Проверено 11 июня 2017 г.