Заголовок HTTP-ответа Content-Security-Policy позволяет сайту контролировать, какие ресурсы загружает пользовательский агент для конкретной страницы. За исключением особых случаев, набор политик в основном включает указание исходного и скриптового конечных точек сервера. Это поможет предотвратить атаки на скрипты между сайтами
Документация:Вход по гиперссылке виден.
В этой статье описывается Политика безопасности контента W3C, или сокращённо CSP. Как следует из названия, эта спецификация связана с безопасностью контента и в основном используется для определения, какие ресурсы может загружать страница, а также для снижения частоты XSS.
Ранний Chrome поддерживал CSP через заголовок ответа X-WebKit-CSP, Firefox и IE поддерживали X-Content-Security-Policy, а Chrome25 и Firefox23 начали поддерживать стандартную политику безопасности контента.
Может собираться конфиденциальная информация о веб-приложениях, такая как имена пользователей, пароли, имена машин и/или конфиденциальные расположения файлов Начинающих пользователей можно убедить предоставить конфиденциальную информацию, такую как имена пользователей, пароли, номера кредитных карт, номера социального страхования и т.д
Сначала создадим новый проект ASP.NET MVC, создадим новый скрипт js и динамически загрузим js-код статистики Baidu, следующим образом:
Как показано на рисунке выше, мы можем увидеть JS-скрипт-код, успешно введённый в стороннюю компанию (Baidu), если в стороннем JS присутствует вредоносный код, например, кража cookie, модификация контента, перемещение ссылок и т.д.
Как остановить появление небезопасных сторонних JS-скриптов?
Обходной путь
Головка откликаДобавить «Политику безопасности контента»Например:
Директива | Пример значения инструкции | иллюстрировать | default-src | 'self' cnd.a.com | Определите стандартную политику загрузки для всех типов ресурсов (JS, IMAGE, CSS, WEB FONT, AJAX-запросы, iframes, мультимедиа и др.) и используйте её по умолчанию для определённых типов ресурсов, если отдельной политики нет. | script-src | 'self' js.a.com | Определите политику загрузки для JavaScript. | Стиль-SRC | 'self' css.a.com | Определите политику загрузки для стиля. | IMG-SRC | «я» img.a.com | Определите политику загрузки для изображений. | CONNECT-SRC | «я» | Политики загрузки для запросов от Ajax, WebSockets и других. Если это не разрешено, браузер имитирует ответ со статусом 400. | font-src | font.a.com | Политика загрузки для WebFont. | object-src | «я» | <object><embed> <applet> Политики загрузки плагинов, таких как flash, были введены для тегов, таких как , или . | Media-src | media.a.com | <audio> <video> Стратегии загрузки для HTML-мультимедиа, введённые для тегов, таких как или . | frame-src | «я» | Политика загрузки кадров. | песочница | Разрешённые формы | Включите песочницу (аналогичную свойству песочницы iframe) для запрошённого ресурса. | report-uri | /report-uri | Сообщите браузеру, на какой адрес отправлять данные журнала, если запрошенный ресурс не разрешен политикой. Особенное: если вы хотите, чтобы браузер сообщал только о логах и не блокировал ничего, можно использовать заголовок Content-Security-Policy-Report-Only. |
Давайте изменим файл web.config проекта, чтобы добавить пользовательский заголовок ответа следующим образом:
Повторите проект, как показано ниже:
Браузер успешно заблокировал загрузку сторонних js-скриптов:
Отказался загружать скрипт 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319', так как он нарушает следующую директиву Политики безопасности контента: "script-src 'self' http://localhost:56888/ ". Обратите внимание, что 'script-src-elem' не был явно установлен, поэтому 'script-src' используется как запасной вариант. (Конец)
|