Политика безопасности контента ( CSP ) - это стандарт компьютерной безопасности, введенный для предотвращения межсайтовых сценариев (XSS), кликджекинга и других атак с внедрением кода в результате выполнения вредоносного контента в контексте доверенной веб-страницы . [1] Это кандидат в рекомендацию рабочей группы W3C по безопасности веб-приложений [2], широко поддерживаемый современными веб-браузерами . [3] CSP предоставляет владельцам веб-сайтов стандартный метод для объявления утвержденных источников контента, который браузерам следует разрешить загружать на этот веб-сайт.JavaScript , CSS , HTML-фреймы , веб-рабочие , шрифты , изображения, встраиваемые объекты, такие как Java-апплеты , ActiveX , аудио- и видеофайлы, а также другие функции HTML5 .
Статус [ изменить ]
Стандарт, первоначально названный Content Restrictions, был предложен Робертом Хансеном в 2004 году [4], впервые реализован в Firefox 4 и быстро принят другими браузерами. Версия 1 стандарта была опубликована в 2012 году как рекомендация кандидата от W3C [5], а в 2014 году были опубликованы другие версии (уровень 2). По состоянию на 2015 год [Обновить]разрабатывается черновик уровня 3 с новыми функциями, быстро принимаемыми веб-браузерами. . [6]
Следующие имена заголовков используются как часть экспериментальных реализаций CSP: [3]
Content-Security-Policy
- стандартное название заголовка, предложенное документом W3C. Google Chrome поддерживает это с версии 25. [7] Firefox поддерживает это с версии 23, [8] выпущенной 6 августа 2013 года. [9] WebKit поддерживает это с версии 528 (ночная сборка). [10] Поддержка Microsoft Edge на основе Chromium аналогична поддержке Chrome. [11]X-WebKit-CSP
- устаревший экспериментальный заголовок, представленный в Google Chrome и других браузерах на основе WebKit ( Safari ) в 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 [Обновить]года W3C предлагает ряд новых стандартов безопасности браузеров, большинство из которых дополняют CSP: [19]
- Целостность субресурсов (SRI) , чтобы гарантировать загрузку только известных доверенных файлов ресурсов (обычно JavaScript , CSS ) со сторонних серверов (обычно CDN )
- Смешанный контент , чтобы прояснить политику предполагаемого браузера в отношении страниц, загружаемых через HTTPS, и связывания контента через открытый текст HTTP.
- Обновление небезопасных запросов , подсказывающих браузерам, как обрабатывать устаревшие ссылки на страницах, перенесенных на HTTPS
- Credential Management , унифицированный API JavaScript для доступа к учетным данным пользователя для упрощения сложных схем входа в систему,
- Политика реферера, расширение CSP, чтобы подсказывать браузеру генерацию заголовков Referer . [19]
Обходы [ править ]
В декабре 2015 года [20] и декабре 2016 года [21] было опубликовано несколько методов обхода источников в 'nonce'
белом списке. В январе 2016 года [22] был опубликован еще один метод, который использует белые списки CSP для всего сервера для использования старых и уязвимых версий библиотек JavaScript, размещенных на одном сервере (частый случай с серверами CDN). В мае 2017 года [23] был опубликован еще один метод обхода CSP с использованием кода фреймворка веб-приложений.
Режим работы [ править ]
Если Content-Security-Policy
заголовок присутствует в ответе сервера, соответствующий клиент применяет декларативную политику белого списка. Одним из примеров цели политики является более строгий режим выполнения для JavaScript, чтобы предотвратить определенные атаки с использованием межсайтовых сценариев. На практике это означает, что ряд функций по умолчанию отключен:
- Встроенный код JavaScript [a]
<script>
блоки, [b]- Обработчики событий DOM как атрибуты HTML (например
onclick
) - Эти
javascript:
ссылки
- Встроенные операторы CSS
<style>
блок [b]style
приписывается элементам HTML
- Оценка динамического кода JavaScript [c]
eval()
- строковые аргументы для
setTimeout
иsetInterval
функции new Function()
конструктор
- Операторы динамического CSS
CSSStyleSheet.insertRule()
метод
Хотя использование CSP в новом приложении может быть довольно простым, особенно с CSP-совместимой инфраструктурой JavaScript , [d] существующие приложения могут потребовать некоторого рефакторинга или ослабления политики. Рекомендуемая практика кодирования для веб-приложений, совместимых с CSP, заключается в загрузке кода из внешних исходных файлов ( <script src>
), анализе JSON вместо его оценки и использовании EventTarget.addEventListener()
для установки обработчиков событий. [24]
Примечания [ править ]
- ^ Это поведение можно отключить глобально с помощью специального
'unsafe-inline'
оператора - ^ a b Надежные встроенные блоки
<script>
и<style>
блоки могут быть индивидуально внесены в белый список CSP с помощью операторовnonce
илиhash
. - ^ Это поведение можно отключить глобально с помощью специального
'unsafe-eval'
оператора - ^ Например, AngularJS требует,чтобы только один флаг инициализации был переключен в CSP-совместимый режим -
<html ng-app ng-csp>
Отчетность [ править ]
Каждый раз, когда запрошенный ресурс или выполнение скрипта нарушает политику, браузер запускает POST
запрос на значение, указанное в report-uri
[25] или report-to
[26], содержащий подробную информацию о нарушении.
Отчеты CSP представляют собой стандартные структуры JSON и могут быть получены либо собственным API приложения [27], либо общедоступными получателями отчетов CSP. [ необходима цитата ]
В 2018 году исследователи безопасности показали, как отправлять ложные срабатывания сообщения назначенному получателю, указанному в report-uri
. Это позволяет потенциальным злоумышленникам произвольно запускать эти сигналы тревоги и может сделать их менее полезными в случае реальной атаки. [28] Такое поведение задумано и не может быть исправлено, так как браузер (клиент) отправляет отчеты.
Исключение надстроек и расширений браузера [ править ]
В соответствии с исходной моделью обработки CSP (1.0) (2012–2013) [29] CSP не должен мешать работе надстроек или расширений браузера, установленных пользователем. Эта функция CSP фактически позволила бы любому надстройке, расширению или букмарклету внедрять сценарий в веб-сайты, независимо от происхождения этого сценария, и, таким образом, быть освобожденным от политик CSP.
Однако с тех пор эта политика была изменена (начиная с CSP 1.1 [30] ) со следующей формулировкой. Обратите внимание на использование слова «может» вместо предшествующей абсолютной формулировки «следует (не)»:
Примечание. Пользовательские агенты могут позволять пользователям изменять или обходить принудительное применение политик с помощью пользовательских настроек, букмарклетов, сторонних дополнений к пользовательскому агенту и других подобных механизмов.
Абсолютная формулировка «следует» использовалась пользователями браузера для запроса / требования соблюдения политики и внесения изменений в популярные браузеры (Firefox, Chrome, Safari) для ее поддержки. Это было особенно спорным , когда такие сайты , как Twitter и GitHub начали использовать сильные политики CSP, которые «сломали» использование Букмарклетов. [31]
W3C Web Application Security Рабочая группа считает такую сценарий , чтобы быть частью Trusted Computing Base реализована в браузере; однако представитель Cox Communications заявил в рабочей группе, что это исключение является потенциальной дырой в безопасности, которая может быть использована злонамеренными или скомпрометированными надстройками или расширениями. [32] [33]
См. Также [ править ]
- NoScript - защита от XSS и Enforcer границ приложений (ABE), расширение для Firefox [34] [35]
- HTTP Switchboard - определенные пользователем правила CSP, расширение для Google Chrome [36] и Opera [37]
- Строгая безопасность транспорта HTTP
- Закрепление открытого ключа HTTP
Ссылки [ править ]
- ^ Сид Штамм (2009-03-11). «Безопасность / CSP / Spec - MozillaWiki» . wiki.mozilla.org . Проверено 29 июня 2011 .
Политика безопасности контента предназначена для помощи веб-дизайнерам или администраторам серверов в определении того, как контент взаимодействует на их веб-сайтах. Это помогает смягчить и обнаружить типы атак, такие как XSS и внедрение данных.
- ^ «Состояние проекта» . 2016-09-13 . Проверено 5 октября 2016 .
- ^ a b «Могу ли я использовать Политику безопасности контента?» . Фирд . Проверено 22 февраля 2013 года .
- ^ Роберт Хансен (2009-06-01). «Политика безопасности контента Mozilla» . Архивировано из оригинального 18 -го марта 2015 года . Проверено 29 июня 2011 .
Ограничения содержимого - способ для веб-сайтов указать браузеру повысить безопасность на страницах, где сайт знает, что содержимое отправлено пользователем и, следовательно, потенциально опасно.
- ^ «Политика безопасности контента 1.0» . W3C . Проверено 13 ноября 2015 .
- ^ «Уровень политики безопасности контента 3» . W3C . Проверено 13 ноября 2015 .
- ^ «Chrome 25 Beta: Политика безопасности контента и теневой DOM» . Google. 14 января 2013 . Проверено 22 февраля 2013 года .
- ^ «Политика безопасности контента 1.0 приземляется в Firefox Aurora» . Mozilla Foundation. 29 мая 2013 года . Проверено 16 июня 2013 года .
- ^ "RapidRelease / Календарь" . Mozilla Foundation. 29 мая 2013 года . Проверено 16 июня 2013 года .
- ^ «Ошибка 96765 - реализовать заголовок« Content-Security-Policy »» . WebKit. 31 октября 2012 . Проверено 7 августа 2015 года .
- ^ «Политика безопасности контента (CSP)» . Microsoft . Проверено 6 февраля 2020 года .
- ^ «Новые функции безопасности Chromium, июнь 2011 г.» . Google. 14 июня 2011 . Проверено 22 февраля 2013 года .
- ^ «Введение в политику безопасности контента» . Mozilla Foundation . Проверено 22 февраля 2013 года .
- ^ "Элемент HTML META" . Политика безопасности контента, уровень 2 . W3C . Проверено 14 ноября 2015 .
- ^ «Глубокая защита: блокировка мэш-апов с помощью песочницы HTML5» . Команда разработчиков Windows Internet Explorer . Проверено 13 апреля 2014 года .
- ^ "Директива ngCsp" . AngularJS . Проверено 27 октября, 2020 .
- ^ "Джанго-безопасность" .
- ^ «Политика безопасности контента» . GitHub.
- ^ a b «Рабочая группа по безопасности веб-приложений» . Проверено 13 ноября 2015 .
- ^ «CSP 2015» . XSS Jigsaw . Проверено 12 декабря 2015 года .
- ^ Lekies, Себастьян. «Сборник обходов CSP» . Проверено 5 июня 2017 .
- ^ «Оскорбительные отношения с AngularJS» . Проверено 5 января 2016 года .
- ^ OWASP (25 мая 2017 г. ), AppSec EU 2017 Don't Trust The DOM: Bypassing XSS Mitigations via Script Gadgets Себастьяна Лекеса , получено 5 июня 2017 г.
- ^ Запад, Майк (15 июня 2012 г.). «Введение в политику безопасности контента» . HTML5 Rocks . Проверено 22 февраля 2013 года .
- ^ «Уровень политики безопасности контента 3» . www.w3.org . Проверено 12 января 20 .
- ^ "CSP: отчет - HTTP | MDN" . developer.mozilla.org . Проверено 25 января 2021 .
- ^ Например, в Django приемник CSP доступен вмодуле django-security .
- ^ "Вспышка синей команды - когда вы их сбиваете с толку, вы их теряете" . Secjuice . 2018-11-04 . Проверено 27 декабря 2019 .
- ^ «Модель обработки CSP» . 2012-11-15 . Проверено 6 октября 2013 .
- ^ «CSP 1.1: добавить ненормативный язык для расширений» . GitHub w3c webappsec . GitHub. 27 февраля 2014 . Дата обращения 14 сентября 2016 .
- ^ «Ошибка 866522 - Букмарклеты, затронутые CSP» . Bugzilla . Mozilla. 28 апреля 2013 . Дата обращения 14 сентября 2016 .
- ^ «Подрыв политик CSP для надстроек (расширений) браузера» . 2013-09-25 . Проверено 6 октября 2013 .
- ^ "Re: [CSP] Запрос на изменение предложения букмарклета / расширений в CSP1.1" . 2014-08-03 . Проверено 8 октября 2015 .
- ^ "Надстройка пакета безопасности Noscript для Firefox" . addons.mozilla.org . Дата обращения 11 июня 2017 .
- ^ «Расширение NoScript Firefox - Официальный сайт» . noscript.net . Дата обращения 11 июня 2017 .
- ^ "Коммутатор HTTP для Chrome" . chrome.google.com . Архивировано из оригинала на 2014-08-17.
- ^ "Коммутатор HTTP для Opera" . addons.opera.com . Дата обращения 11 июня 2017 .
Внешние ссылки [ править ]
- Рабочий проект политики безопасности контента W3C
- Рекомендации по безопасному кодированию для политики безопасности контента
- Политика безопасности контента (CSP) в MDN Web Docs