Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Режим работы [ править ]

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

Если 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]

Примечания [ править ]

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

Ссылки [ править ]

  1. ^ Сид Штамм (2009-03-11). «Безопасность / CSP / Spec - MozillaWiki» . wiki.mozilla.org . Проверено 29 июня 2011 . Политика безопасности контента предназначена для помощи веб-дизайнерам или администраторам серверов в определении того, как контент взаимодействует на их веб-сайтах. Это помогает смягчить и обнаружить типы атак, такие как XSS и внедрение данных.
  2. ^ «Состояние проекта» . 2016-09-13 . Проверено 5 октября 2016 .
  3. ^ a b «Могу ли я использовать Политику безопасности контента?» . Фирд . Проверено 22 февраля 2013 года .
  4. ^ Роберт Хансен (2009-06-01). «Политика безопасности контента Mozilla» . Архивировано из оригинального 18 -го марта 2015 года . Проверено 29 июня 2011 . Ограничения содержимого - способ для веб-сайтов указать браузеру повысить безопасность на страницах, где сайт знает, что содержимое отправлено пользователем и, следовательно, потенциально опасно.
  5. ^ «Политика безопасности контента 1.0» . W3C . Проверено 13 ноября 2015 .
  6. ^ «Уровень политики безопасности контента 3» . W3C . Проверено 13 ноября 2015 .
  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 Foundation . Проверено 22 февраля 2013 года .
  14. ^ "Элемент HTML META" . Политика безопасности контента, уровень 2 . W3C . Проверено 14 ноября 2015 .
  15. ^ «Глубокая защита: блокировка мэш-апов с помощью песочницы HTML5» . Команда разработчиков Windows Internet Explorer . Проверено 13 апреля 2014 года .
  16. ^ "Директива ngCsp" . AngularJS . Проверено 27 октября, 2020 .
  17. ^ "Джанго-безопасность" .
  18. ^ «Политика безопасности контента» . GitHub.
  19. ^ a b «Рабочая группа по безопасности веб-приложений» . Проверено 13 ноября 2015 .
  20. ^ «CSP 2015» . XSS Jigsaw . Проверено 12 декабря 2015 года .
  21. ^ Lekies, Себастьян. «Сборник обходов CSP» . Проверено 5 июня 2017 .
  22. ^ «Оскорбительные отношения с AngularJS» . Проверено 5 января 2016 года .
  23. ^ OWASP (25 мая 2017 г. ), AppSec EU 2017 Don't Trust The DOM: Bypassing XSS Mitigations via Script Gadgets Себастьяна Лекеса , получено 5 июня 2017 г.
  24. ^ Запад, Майк (15 июня 2012 г.). «Введение в политику безопасности контента» . HTML5 Rocks . Проверено 22 февраля 2013 года .
  25. ^ «Уровень политики безопасности контента 3» . www.w3.org . Проверено 12 января 20 .
  26. ^ "CSP: отчет - HTTP | MDN" . developer.mozilla.org . Проверено 25 января 2021 .
  27. ^ Например, в Django приемник CSP доступен вмодуле django-security .
  28. ^ "Вспышка синей команды - когда вы их сбиваете с толку, вы их теряете" . Secjuice . 2018-11-04 . Проверено 27 декабря 2019 .
  29. ^ «Модель обработки CSP» . 2012-11-15 . Проверено 6 октября 2013 .
  30. ^ «CSP 1.1: добавить ненормативный язык для расширений» . GitHub w3c webappsec . GitHub. 27 февраля 2014 . Дата обращения 14 сентября 2016 .
  31. ^ «Ошибка 866522 - Букмарклеты, затронутые CSP» . Bugzilla . Mozilla. 28 апреля 2013 . Дата обращения 14 сентября 2016 .
  32. ^ «Подрыв политик CSP для надстроек (расширений) браузера» . 2013-09-25 . Проверено 6 октября 2013 .
  33. ^ "Re: [CSP] Запрос на изменение предложения букмарклета / расширений в CSP1.1" . 2014-08-03 . Проверено 8 октября 2015 .
  34. ^ "Надстройка пакета безопасности Noscript для Firefox" . addons.mozilla.org . Дата обращения 11 июня 2017 .
  35. ^ «Расширение NoScript Firefox - Официальный сайт» . noscript.net . Дата обращения 11 июня 2017 .
  36. ^ "Коммутатор HTTP для Chrome" . chrome.google.com . Архивировано из оригинала на 2014-08-17.
  37. ^ "Коммутатор HTTP для Opera" . addons.opera.com . Дата обращения 11 июня 2017 .

Внешние ссылки [ править ]

  • Рабочий проект политики безопасности контента W3C
  • Рекомендации по безопасному кодированию для политики безопасности контента
  • Политика безопасности контента (CSP) в MDN Web Docs