架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15886|回复: 2

[安全漏洞] “Content-Security-Policy”头缺失或不安全漏洞

[复制链接]
发表于 2021-6-11 10:36:39 | 显示全部楼层 |阅读模式
HTTP 响应头Content-Security-Policy允许站点控制用户代理为指定页面加载哪些资源。除了特殊情况,设置的策略主要涉及指定服务器的源和脚本结束点。这将帮助阻止跨站点脚本攻击(Cross-Site Script)

文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy

本文要介绍的是 W3C 的 Content Security Policy,简称 CSP。顾名思义,这个规范与内容安全有关,主要是用来定义页面可以加载哪些资源,减少 XSS 的发生。

早期的 Chrome 是通过 X-WebKit-CSP 响应头来支持 CSP 的,而 firefox 和 IE 则支持 X-Content-Security-Policy,Chrome25 和 Firefox23 开始支持标准的 Content-Security-Policy。

可能会收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置
可能会劝说初级用户提供诸如用户名、密码、信用卡号、社会保险号等敏感信息

QQ截图20210611102512.jpg
首先,我们新建一个 ASP.NET MVC 的项目,新建了一个 js 脚本,动态加载百度统计的 js 代码,如下:


QQ截图20210611102948.jpg

如上图,我们可以看到成功引入第三方(百度)的 JS 脚本代码,假如,第三方 js 存在一些恶意代码,例如:盗取 cookie,修改内容、跳转链接等。

如何阻止引入不安全的第三方 js 脚本呢?

解决方法

响应头添加“Content-Security-Policy”,示例如下:

Content-Security-Policy: default-src 'self' http://example.com;
                         connect-src 'none';
Content-Security-Policy: connect-src http://example.com/;
                         script-src http://example.com/

指令
指令值示例
说明
default-src
'self' cnd.a.com
定义针对所有类型(js、image、css、web font,ajax 请求,iframe,多媒体等)资源的默认加载策略,某类型资源如果没有单独定义策略,就使用默认的。
script-src
'self' js.a.com
定义针对 JavaScript 的加载策略。
style-src
'self' css.a.com
定义针对样式的加载策略。
img-src
'self' img.a.com
定义针对图片的加载策略。
connect-src
'self'
针对 Ajax、WebSocket 等请求的加载策略。不允许的情况下,浏览器会模拟一个状态为 400 的响应。
font-src
font.a.com
针对 WebFont 的加载策略。
object-src
'self'
针对 <object>、<embed> 或 <applet> 等标签引入的 flash 等插件的加载策略。
media-src
media.a.com
针对 <audio> 或 <video> 等标签引入的 HTML 多媒体的加载策略。
frame-src
'self'
针对 frame 的加载策略。
sandbox
allow-forms
对请求的资源启用 sandbox(类似于 iframe 的 sandbox 属性)。
report-uri
/report-uri
告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。 特别的:如果想让浏览器只汇报日志,不阻止任何内容,可以改用 Content-Security-Policy-Report-Only 头。

我们修改项目的 web.config 文件,添加自定义响应头如下:

重新运行项目,如下图:

QQ截图20210611103534.jpg

浏览器成功阻止加载了第三方 js 脚本:

Refused to load the script 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' because it violates the following Content Security Policy directive: "script-src 'self' http://localhost:56888/ ". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
(完)




上一篇:ASP.NET MVC HttpApplication 执行顺序
下一篇:总结一下时下流行的浏览器User-Agent大全
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-12-17 22:38:43 | 显示全部楼层
学习一下!!!!!!!!!!!!!!!!
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-10-18 17:16:34 | 显示全部楼层
找了好久,学习一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 06:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表