stringtranslate.com

Политика безопасности контента

Политика безопасности контента ( 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 год , проект Уровня 3 разрабатывается с новыми функциями, которые быстро принимаются веб-браузерами. [6]

Следующие имена заголовков используются в рамках экспериментальных реализаций CSP: [3]

Веб-сайт может объявлять несколько заголовков CSP, также смешивая заголовки принудительного исполнения и только для отчетов. Каждый заголовок будет обрабатываться браузером отдельно.

CSP также может быть доставлен в HTML-коде с использованием метатега , хотя в этом случае его эффективность будет ограничена. [14]

Internet Explorer 10 и Internet Explorer 11 также поддерживают CSP, но только директиву sandbox, используя экспериментальный 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 с использованием кода фреймворков веб-приложений.

Режим работы

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

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

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

Примечания

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

Однако эта политика с тех пор была изменена (начиная с CSP 1.1 [29] ) со следующей формулировкой. Обратите внимание на использование слова «может» вместо прежней абсолютной формулировки «не следует»:

Примечание: Пользовательские агенты могут разрешать пользователям изменять или обходить принудительное применение политики с помощью пользовательских настроек, букмарклетов, сторонних дополнений к пользовательскому агенту и других подобных механизмов.

Абсолютная формулировка «должен» использовалась пользователями браузеров для запроса/требования соблюдения политики и установки изменений в популярных браузерах (Firefox, Chrome, Safari) для ее поддержки. Это было особенно спорно, когда такие сайты, как Twitter и GitHub, начали использовать строгие политики CSP, которые «сломали» использование Bookmarklets. [30]

Рабочая группа W3C по безопасности веб-приложений считает, что такой скрипт является частью Trusted Computing Base, реализуемой браузером; однако представитель Cox Communications заявил рабочей группе , что это исключение является потенциальной дырой в безопасности, которая может быть использована вредоносными или скомпрометированными дополнениями или расширениями. [31] [32]

Дополнительные меры

По состоянию на 2015 год W3C предлагает ряд новых стандартов безопасности браузеров, большинство из которых дополняют CSP: [33]

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

Ссылки

  1. ^ Сид Стамм (2009-03-11). "Безопасность/CSP/Spec - MozillaWiki". wiki.mozilla.org . Получено 2011-06-29 . Политика безопасности контента предназначена для того, чтобы помочь веб-дизайнерам или администраторам серверов указать, как контент взаимодействует на их веб-сайтах. Она помогает смягчить и обнаружить такие типы атак, как XSS и инъекция данных.
  2. ^ "Состояние проекта". 2016-09-13 . Получено 2016-10-05 .
  3. ^ ab "Могу ли я использовать политику безопасности контента?". Fyrd . Получено 22 февраля 2013 г.
  4. ^ Роберт Хансен (2009-06-01). «Политика безопасности контента Mozilla». Архивировано из оригинала 18 марта 2015 г. Получено 2011-06-29 . Ограничения контента — способ для веб-сайтов сообщить браузеру о необходимости повысить уровень безопасности на страницах, где сайт знает, что контент отправлен пользователем и, следовательно, потенциально опасен.
  5. ^ "Политика безопасности контента 1.0". W3C . Получено 2015-11-13 .
  6. ^ "Политика безопасности контента уровня 3". W3C . Получено 5 мая 2023 г. .
  7. ^ "Chrome 25 Beta: Content Security Policy and Shadow DOM". Google. 14 января 2013 г. Получено 22 февраля 2013 г.
  8. ^ "Политика безопасности контента 1.0 появляется в Firefox Aurora". Mozilla Foundation. 29 мая 2013 г. Получено 16 июня 2013 г.
  9. ^ "RapidRelease/Calendar". 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 Foundation . Получено 22 февраля 2013 г.
  14. ^ "Элемент HTML META". Политика безопасности контента, уровень 2. W3C . Получено 14.11.2015 .
  15. ^ "Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox". Windows Internet Explorer Engineering Team . Получено 13 апреля 2014 г.
  16. ^ "ngCsp directive". AngularJS . Получено 27 октября 2020 г. .
  17. ^ "django-security". GitHub . 21 ноября 2022 г.
  18. ^ "Политика безопасности контента". GitHub. 19 апреля 2013 г.
  19. ^ "CSP 2015". XSS Jigsaw. 23 ноября 2015 г. Архивировано из оригинала 20 декабря 2015 г. Получено 12 декабря 2015 г.
  20. ^ Лекис, Себастьян. "Коллекция обходов CSP" . Получено 05.06.2017 .
  21. ^ «Оскорбительные отношения с AngularJS». 12 декабря 2015 г. Получено 5 января 2016 г.
  22. ^ OWASP (2017-05-25), AppSec EU 2017 Don't Trust The DOM: Bypassing XSS Mitigations Via Script Gadgets, автор Sebastian Lekies , получено 2017-06-05
  23. ^ Уэст, Майк (15 июня 2012 г.). «Введение в политику безопасности контента». HTML5 Rocks . Получено 22 февраля 2013 г.
  24. ^ "Политика безопасности контента, уровень 3". www.w3.org . Получено 12.01.2021 .
  25. ^ "CSP: report-to - HTTP | MDN". developer.mozilla.org . Получено 2021-01-25 .
  26. ^ Например, в Django приемник CSP доступен в модуле django-security.
  27. ^ "Flaring The Blue Team - When You Confuse Them You Lose Them". Secjuice . 2018-11-04 . Получено 2019-12-27 .
  28. ^ "Модель обработки CSP". 2012-11-15 . Получено 2013-10-06 .
  29. ^ "CSP 1.1: Добавить ненормативный язык для расширений". GitHub w3c webappsec . GitHub. 27 февраля 2014 г. Получено 14 сентября 2016 г.
  30. ^ "Ошибка 866522 — Букмарклеты, затронутые CSP". Bugzilla . Mozilla. 28 апреля 2013 г. Получено 14 сентября 2016 г.
  31. ^ "Подрыв политик CSP для надстроек (расширений) браузера". 2013-09-25 . Получено 2013-10-06 .
  32. ^ "Re: [CSP] Запрос на изменение предложения о букмарклетах/расширениях в CSP1.1". 2014-08-03 . Получено 2015-10-08 .
  33. ^ ab "Рабочая группа по безопасности веб-приложений". GitHub . Получено 2015-11-13 .
  34. ^ "Дополнение к пакету безопасности Noscript для Firefox". addons.mozilla.org . Получено 11 июня 2017 г. .
  35. ^ "Расширение NoScript Firefox — Официальный сайт". noscript.net . Получено 11 июня 2017 г. .
  36. ^ "HTTP Switchboard для Chrome". chrome.google.com . Архивировано из оригинала 2014-08-17.
  37. ^ "HTTP Switchboard для Opera". addons.opera.com . Получено 11 июня 2017 г. .

Внешние ссылки