Политика безопасности контента - 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 с использованием кода фреймворка веб-приложений.

Режим работы

Сопоставление функций HTML5 и JavaScript и элементов управления политикой безопасности контента

Если Контент-Безопасность-Политика заголовок присутствует в ответе сервера, соответствующий клиент применяет декларативную политику белого списка. Одним из примеров цели политики является более строгий режим выполнения для JavaScript, чтобы предотвратить определенные атаки с использованием межсайтовых сценариев. На практике это означает, что ряд функций по умолчанию отключен:

  • В соответствии JavaScript код[а]
    • <script> блоки[b]
    • ДОМ обработчики событий как атрибуты HTML (например, по щелчку)
    • В javascript: ссылки
  • В соответствии CSS заявления
    • <style> блокировать[b]
    • стиль приписывается элементам HTML
  • Динамический JavaScript оценка кода[c]
    • eval ()
    • строковые аргументы для setTimeout и setInterval функции
    • новая функция () конструктор
  • Динамический CSS заявления
    • CSSStyleSheet.insertRule () метод

Хотя использование CSP в новом приложении может быть довольно простым, особенно с CSP-совместимым JavaScript рамки,[d] существующие приложения могут потребовать некоторого рефакторинга или ослабления политики. Рекомендуемая практика кодирования для CSP-совместимых веб-приложений - загрузка кода из внешних исходных файлов (<script src>), разобрать JSON вместо того, чтобы оценивать его и использовать EventTarget.addEventListener () для установки обработчиков событий.[24]

Примечания

  1. ^ Это поведение можно отключить глобально с помощью специального 'небезопасный встроенный' утверждение
  2. ^ а б Надежный встроенный <script> и <style> блоки могут быть индивидуально внесены в белый список CSP с помощью nonce или же хэш заявления.
  3. ^ Это поведение можно отключить глобально с помощью специального 'unsafe-eval' утверждение
  4. ^ Например, 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]

Смотрите также

Рекомендации

  1. ^ Сид Штамм (2009-03-11). «Безопасность / CSP / Спецификация - MozillaWiki». wiki.mozilla.org. Получено 2011-06-29. Политика безопасности контента предназначена для помощи веб-дизайнерам или администраторам серверов в определении того, как контент взаимодействует на их веб-сайтах. Это помогает смягчать и обнаруживать типы атак, такие как XSS и внедрение данных.
  2. ^ «Состояние проекта». 2016-09-13. Получено 2016-10-05.
  3. ^ а б «Могу ли я использовать Политику безопасности контента?». Фирд. Получено 22 февраля, 2013.
  4. ^ Роберт Хансен (01.06.2009). «Политика безопасности содержимого Mozilla». Архивировано из оригинал 18 марта 2015 г.. Получено 2011-06-29. Ограничения содержимого - способ, с помощью которого веб-сайты могут сообщить браузеру о необходимости повышения безопасности на страницах, на которых сайт знает, что содержимое отправлено пользователем и, следовательно, потенциально опасно.
  5. ^ «Политика безопасности контента 1.0». W3C. Получено 2015-11-13.
  6. ^ «Уровень политики безопасности контента 3». W3C. Получено 2015-11-13.
  7. ^ «Chrome 25 Beta: политика безопасности контента и теневой DOM». Google. 14 января 2013 г.. Получено 22 февраля, 2013.
  8. ^ «Политика безопасности контента 1.0 появится в Firefox Aurora». Mozilla Foundation. 29 мая, 2013. Получено 16 июня, 2013.
  9. ^ "RapidRelease / Календарь". Mozilla Foundation. 29 мая, 2013. Получено 16 июня, 2013.
  10. ^ «Ошибка 96765 - реализовать заголовок Content-Security-Policy». WebKit. 31 октября 2012 г.. Получено 7 августа, 2015.
  11. ^ «Политика безопасности контента (CSP)». Microsoft. Получено 6 февраля, 2020.
  12. ^ «Новые функции безопасности Chromium, июнь 2011 г.». Google. 14 июня 2011 г.. Получено 22 февраля, 2013.
  13. ^ «Введение в политику безопасности контента». Фонд Mozilla. Получено 22 февраля, 2013.
  14. ^ "Элемент HTML META". Политика безопасности контента, уровень 2. W3C. Получено 2015-11-14.
  15. ^ «Глубокая защита: блокировка гибридных приложений с помощью тестовой среды HTML5». Команда разработчиков Windows Internet Explorer. Получено 13 апреля, 2014.
  16. ^ "директива ngCsp". AngularJS. Получено 27 октября, 2020.
  17. ^ "джанго-безопасность".
  18. ^ «Политика безопасности контента». GitHub.
  19. ^ а б «Рабочая группа по безопасности веб-приложений». Получено 2015-11-13.
  20. ^ «CSP 2015». XSS лобзик. Получено 12 декабря, 2015.
  21. ^ Лекес, Себастьян. «Сборник обходов CSP». Получено 2017-06-05.
  22. ^ «Оскорбительные отношения с AngularJS». Получено 5 января, 2016.
  23. ^ OWASP (2017-05-25), AppSec EU 2017 Не доверяйте DOM: обход защиты от XSS-атак с помощью скриптовых гаджетов Себастьяна Лекеса, получено 2017-06-05
  24. ^ Запад, Майк (15 июня 2012 г.). «Введение в политику безопасности контента». HTML5 Rocks. Получено 22 февраля, 2013.
  25. ^ https://www.w3.org/TR/CSP/#directive-report-uri
  26. ^ Например в Джанго приемник CSP доступен в джанго-безопасность модуль.
  27. ^ «Отчетность о политике безопасности контента». report-uri.io. Скотт Хельм.
  28. ^ «Отчет о политике безопасности контента - URI». csper.io. Csper.
  29. ^ "Вспышка синей команды - когда вы их путаете, вы их теряете". Secjuice. 2018-11-04. Получено 2019-12-27.
  30. ^ «Модель обработки CSP». 2012-11-15. Получено 2013-10-06.
  31. ^ «CSP 1.1: добавить ненормативный язык для расширений». GitHub w3c webappsec. GitHub. 27 февраля 2014 г.. Получено 14 сен 2016.
  32. ^ «Ошибка 866522 - Букмарклеты, затронутые CSP». Bugzilla. Mozilla. 28 апреля 2013 г.. Получено 14 сен 2016.
  33. ^ «Подрыв политик CSP для надстроек (расширений) браузера». 2013-09-25. Получено 2013-10-06.
  34. ^ "Re: [CSP] Запрос на изменение предложения букмарклета / расширений в CSP1.1". 2014-08-03. Получено 2015-10-08.
  35. ^ "Надстройка пакета безопасности Noscript для Firefox". addons.mozilla.org. Получено 11 июн 2017.
  36. ^ «Расширение NoScript Firefox - Официальный сайт». noscript.net. Получено 11 июн 2017.
  37. ^ «Коммутатор HTTP для Chrome». chrome.google.com. Архивировано из оригинал на 2014-08-17.
  38. ^ «Коммутатор HTTP для Opera». addons.opera.com. Получено 11 июн 2017.

внешняя ссылка