Политика безопасности контента - защитите свой сайт от XSS-атак
Очень часто при создании любого проекта мы используем определенные сторонние библиотеки, в случае Javascript
; npm packages
, которые рекурсивно используют больше пакетов, и в конечном итоге ваш код включает в себя огромный кусок стороннего кода.
В этом нет ничего плохого, нет смысла изобретать колесо заново. Включаем нужную библиотеку, заставляем наш код работать, пишем тесты.
Проблема в том, что библиотека пытается загрузить удаленный контент на наш сайт. Это может быть изображение, шрифт, стиль или даже Javascript
. Этот контент обходит все наши тесты, проверки и выполняется непосредственно в производственной среде. Что еще хуже, мы не знаем, откуда подается контент.
Content Security Policy (CSP)
Политика безопасности контента (CSP) — это спецификация W3C, которая помогает избежать XSSатак. CSP позволяет разработчикам определять правила для получения ресурсов (изображений, javascript
, шрифтов и т.д.) в клиентском браузере.
Разработчики могут определять политики, чтобы разрешить / ограничить загрузку любого ресурса, ограничить загрузку ресурсов только из определенных доменов и запретить из любого другого домена. Например, вы можете написать CSP, чтобы ограничить браузеры загружать изображения только из example.com
, любые изображения из других доменов не будут загружаться и будут вызывать ошибки. Помимо ресурсов, CSP также предлагает контроль над встраиванием.
Интересно, в этом сценарии, который используется тут, такое включение возможно?
Content-Security-Policy: default-src 'self';
Читать
Можно попробовать включить. Но работы будет много, ИМХО. В Throat, мы сделали это, в Discourse команда не так давно сделала это, нет ничего сложного, просто время.
Первый шаг — убрать все style
и script
из кода. Я бы начал с этого. Далее, посмотреть в сторону
getLangJS
и пройдитесь далее.
Так правильно, когда ничего не работает, и сломать сложно все. А с этой политикой, если её тут добавить, — полный кердык. Только читать. ))) Почистить надо чуток для начала, css при любом раскладе, чего в шаблонах делает? Да и js при желание в файлы закинуть можно. Времени пока не очень много этим заниматься.