Политика безопасности контента - Content Security Policy
Политика безопасности контента (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 году. По состоянию на 2015 год[Обновить] черновик Уровня 3 разрабатывается с новыми функциями, которые быстро внедряются в веб-браузеры.[6]
Следующие имена заголовков используются как часть экспериментальных реализаций CSP:[3]
Контент-Безопасность-Политика
- стандартное название заголовка, предложенное документом W3C. Гугл Хром поддерживает это начиная с версии 25.[7] Firefox поддерживает это начиная с версии 23,[8] выпущен 6 августа 2013 г.[9] WebKit поддерживает это начиная с версии 528 (ночная сборка).[10] На основе хрома Microsoft Edge поддержка аналогична Chrome. [11]X-WebKit-CSP
- устаревший экспериментальный заголовок введен в Гугл Хром и другие WebKit браузеры на основе (Сафари ) в 2011.[12]X-Content-Security-Политика
- устаревший экспериментальный заголовок, представленный в Геккон 2 браузеры на базе (от Firefox 4 до Firefox 22, Thunderbird 3.3, SeaMonkey 2.1).[13]
Веб-сайт может объявлять несколько заголовков CSP, также смешивая принудительные и только отчеты. Каждый заголовок будет обрабатываться браузером отдельно.
CSP также может быть доставлен в HTML-коде с помощью HTML МЕТА тег, хотя в этом случае его эффективность будет ограничена.[14]
Internet Explorer 10 и Internet Explorer 11 также поддерживает CSP, но только директиву песочницы, используя экспериментальную X-Content-Security-Политика
заголовок.[15]
Ряд фреймворков веб-приложений поддерживают CSP, например AngularJS[16] (изначально) и Джанго (промежуточное ПО).[17] Инструкции для Рубин на рельсах были отправлены GitHub.[18] Однако поддержка веб-платформы требуется только в том случае, если содержимое CSP каким-то образом зависит от состояния веб-приложения, например, от использования nonce
источник. В противном случае CSP довольно статичен и может быть доставлен из уровни веб-приложений над приложением, например на балансировщик нагрузки или же веб сервер.
По состоянию на 2015 год[Обновить] W3C предлагает ряд новых стандартов безопасности браузеров, большинство из которых дополняют CSP:[19]
- Целостность подресурсов (НИИ), чтобы гарантировать только известные доверенные файлы ресурсов (обычно JavaScript, CSS ) загружаются со сторонних серверов (обычно CDN )
- Смешанный контент, чтобы уточнить политику предполагаемого браузера в отношении страниц, загружаемых поверх HTTPS и связывание контента через открытый текст HTTP
- Обновление небезопасных запросов, подсказывая браузерам, как обрабатывать устаревшие ссылки на страницах, перенесенных на HTTPS
- Управление учетными данными, единый JavaScript API для доступа к учетным данным пользователя для упрощения сложных схем входа в систему,
- Политика реферера, Расширение CSP, чтобы указать браузеру на создание Референт заголовки.[19]
Обходы
В декабре 2015 г.[20] и декабрь 2016 г.,[21] несколько способов обхода 'nonce'
белые списки происхождения были опубликованы. В январе 2016 г.[22] был опубликован другой метод, который использует белые списки CSP на уровне сервера для использования старых и уязвимых версий библиотек JavaScript, размещенных на одном сервере (частый случай с серверами CDN). В мае 2017 г.[23] опубликован еще один метод обхода CSP с использованием кода фреймворка веб-приложений.
Режим работы
Если Контент-Безопасность-Политика
заголовок присутствует в ответе сервера, соответствующий клиент применяет декларативную политику белого списка. Одним из примеров цели политики является более строгий режим выполнения для JavaScript, чтобы предотвратить определенные атаки с использованием межсайтовых сценариев. На практике это означает, что ряд функций по умолчанию отключен:
- В соответствии JavaScript код[а]
- В соответствии CSS заявления
<style>
блокировать[b]стиль
приписывается элементам HTML
- Динамический JavaScript оценка кода[c]
eval ()
- строковые аргументы для
setTimeout
иsetInterval
функции новая функция ()
конструктор
- Динамический CSS заявления
CSSStyleSheet.insertRule ()
метод
Хотя использование CSP в новом приложении может быть довольно простым, особенно с CSP-совместимым JavaScript рамки,[d] существующие приложения могут потребовать некоторого рефакторинга или ослабления политики. Рекомендуемая практика кодирования для CSP-совместимых веб-приложений - загрузка кода из внешних исходных файлов (<script src>
), разобрать JSON вместо того, чтобы оценивать его и использовать EventTarget.addEventListener ()
для установки обработчиков событий.[24]
Примечания
- ^ Это поведение можно отключить глобально с помощью специального
'небезопасный встроенный'
утверждение - ^ а б Надежный встроенный
<script>
и<style>
блоки могут быть индивидуально внесены в белый список CSP с помощьюnonce
или жехэш
заявления. - ^ Это поведение можно отключить глобально с помощью специального
'unsafe-eval'
утверждение - ^ Например, AngularJS требуется только один флаг инициализации для переключения в режим совместимости с CSP -
<html ng-app ng-csp>
Составление отчетов
Каждый раз, когда выполнение запрошенного ресурса или скрипта нарушает политику, браузер запускает ПОЧТОВЫЙ
запрос на значение, указанное в report-uri
[25] содержащие подробности нарушения.
Отчеты CSP стандартные JSON структуры и могут быть захвачены собственными приложениями API[26] или публичные получатели отчетов CSP.[27][28]
В 2018 году исследователи безопасности показали, как отправлять ложные положительные отчеты назначенному получателю, указанному в report-uri
. Это позволяет потенциальным злоумышленникам произвольно запускать эти сигналы тревоги и может сделать их менее полезными в случае реальной атаки.[29] Такое поведение задумано и не может быть исправлено, так как браузер (клиент) отправляет отчеты.
Освобождение от надстроек и расширений браузера
Согласно исходной модели обработки CSP (1.0) (2012–2013),[30] CSP не должен мешать работе надстроек или расширений браузера, установленных пользователем. Эта функция CSP фактически разрешила бы любые надстройки, расширения или Букмарклет внедрять скрипт в веб-сайты, независимо от происхождения этого скрипта, и, таким образом, быть освобожденным от политик CSP.
Однако с тех пор эта политика была изменена (начиная с версии CSP 1.1[31]) в следующей редакции. Обратите внимание на использование слова «может» вместо предшествующей абсолютной формулировки «должен (не)»:
Примечание: пользовательские агенты май позволяют пользователям изменять или обходить применение политик с помощью пользовательских настроек, букмарклетов, сторонних дополнений к пользовательскому агенту и других подобных механизмов.
Абсолютная формулировка «следует» использовалась пользователями браузера для запроса / требования соблюдения политики и внесения изменений в популярные браузеры (Firefox, Chrome, Safari) для ее поддержки. Это было особенно спорным, когда такие сайты, как Twitter и GitHub начали использовать сильные политики CSP, которые «сломали» использование Букмарклетов.[32]
В W3C Рабочая группа по безопасности веб-приложений считает такой сценарий частью Надежная вычислительная база реализуется браузером; однако, это было аргументировано рабочей группой представителем Cox Communications что это исключение является потенциальной дырой в безопасности, которая может быть использована вредоносными или скомпрометированными надстройками или расширениями.[33][34]
Смотрите также
- NoScript - анти-XSS защита и Application Boundaries Enforcer (ABE), расширение для Fire Fox[35][36]
- Коммутатор HTTP - правила CSP, определенные пользователем, расширение для Гугл Хром[37] и Опера[38]
- Строгая безопасность транспорта HTTP
- Закрепление открытого ключа HTTP
Рекомендации
- ^ Сид Штамм (2009-03-11). «Безопасность / CSP / Спецификация - MozillaWiki». wiki.mozilla.org. Получено 2011-06-29.
Политика безопасности контента предназначена для помощи веб-дизайнерам или администраторам серверов в определении того, как контент взаимодействует на их веб-сайтах. Это помогает смягчать и обнаруживать типы атак, такие как XSS и внедрение данных.
- ^ «Состояние проекта». 2016-09-13. Получено 2016-10-05.
- ^ а б «Могу ли я использовать Политику безопасности контента?». Фирд. Получено 22 февраля, 2013.
- ^ Роберт Хансен (01.06.2009). «Политика безопасности содержимого Mozilla». Архивировано из оригинал 18 марта 2015 г.. Получено 2011-06-29.
Ограничения содержимого - способ, с помощью которого веб-сайты могут сообщить браузеру о необходимости повышения безопасности на страницах, на которых сайт знает, что содержимое отправлено пользователем и, следовательно, потенциально опасно.
- ^ «Политика безопасности контента 1.0». W3C. Получено 2015-11-13.
- ^ «Уровень политики безопасности контента 3». W3C. Получено 2015-11-13.
- ^ «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. Получено 22 февраля, 2013.
- ^ "Элемент HTML META". Политика безопасности контента, уровень 2. W3C. Получено 2015-11-14.
- ^ «Глубокая защита: блокировка гибридных приложений с помощью тестовой среды HTML5». Команда разработчиков Windows Internet Explorer. Получено 13 апреля, 2014.
- ^ "директива ngCsp". AngularJS. Получено 27 октября, 2020.
- ^ "джанго-безопасность".
- ^ «Политика безопасности контента». GitHub.
- ^ а б «Рабочая группа по безопасности веб-приложений». Получено 2015-11-13.
- ^ «CSP 2015». XSS лобзик. Получено 12 декабря, 2015.
- ^ Лекес, Себастьян. «Сборник обходов CSP». Получено 2017-06-05.
- ^ «Оскорбительные отношения с AngularJS». Получено 5 января, 2016.
- ^ OWASP (2017-05-25), AppSec EU 2017 Не доверяйте DOM: обход защиты от XSS-атак с помощью скриптовых гаджетов Себастьяна Лекеса, получено 2017-06-05
- ^ Запад, Майк (15 июня 2012 г.). «Введение в политику безопасности контента». HTML5 Rocks. Получено 22 февраля, 2013.
- ^ https://www.w3.org/TR/CSP/#directive-report-uri
- ^ Например в Джанго приемник CSP доступен в джанго-безопасность модуль.
- ^ «Отчетность о политике безопасности контента». report-uri.io. Скотт Хельм.
- ^ «Отчет о политике безопасности контента - URI». csper.io. Csper.
- ^ "Вспышка синей команды - когда вы их путаете, вы их теряете". Secjuice. 2018-11-04. Получено 2019-12-27.
- ^ «Модель обработки CSP». 2012-11-15. Получено 2013-10-06.
- ^ «CSP 1.1: добавить ненормативный язык для расширений». GitHub w3c webappsec. GitHub. 27 февраля 2014 г.. Получено 14 сен 2016.
- ^ «Ошибка 866522 - Букмарклеты, затронутые CSP». Bugzilla. Mozilla. 28 апреля 2013 г.. Получено 14 сен 2016.
- ^ «Подрыв политик CSP для надстроек (расширений) браузера». 2013-09-25. Получено 2013-10-06.
- ^ "Re: [CSP] Запрос на изменение предложения букмарклета / расширений в CSP1.1". 2014-08-03. Получено 2015-10-08.
- ^ "Надстройка пакета безопасности 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
- Онлайн-тест CSPd
- CSP Tester (расширение для браузера)
- Рекомендации по безопасному кодированию для политики безопасности контента
- Сообщение о нарушениях CSP
- Отчет CSP - конечная точка uri
- Обзор развертывания CSP
- Валидатор CSP
- Оценщик CSP
- Политика безопасности контента (CSP) на Веб-документы MDN