随着XSS、点击劫持和跨站数据泄露漏洞的日益增多,我们需要采取更深层次的纵深防御安全策略。即将防御措施抽离出来,做好默认安全配置,今天说一下CSP,即内容安全策略,通过服务器端注入内容安全策略(Content-Security-Policy,简称 CSP)头,浏览器能够帮助用户降低很多风险。
CSP本质
CSP 的实质就是白名单制度,开发人员明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置(契合默认安全的原则)。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,同时内部安全运营团队通过态势感知、CSP报告机制能够及时发现攻击并处理,降低被攻击成功的风险,当然如果是攻防演练,还控制了一台列入了白名单的可信主机,这个时候可能就会失效。
CSP主要配置指令
- default-src:
- 定义了大多数资源的默认源。
- script-src:
- 指定了允许加载和执行的脚本的源。
- style-src:
- 指定了允许加载和应用的样式表的源。
- img-src:
- 指定了允许加载的图像的源。
- font-src:
- 指定了允许加载的字体的源。
- media-src:
- 指定了允许加载的媒体资源(如视频和音频)的源。
- object-src:
- 指定了允许加载的插件(如 Flash)的源。
- frame-src:
- 指定了允许在 iframe 中加载的资源的源。
- child-src:
- 指定了允许作为子资源加载的源。
- connect-src:
- 指定了允许进行网络连接(如 AJAX 请求)的源。
- form-action:
- 指定了表单提交的允许目标源。
- frame-ancestors:
- 指定了允许嵌入当前页面的祖先页面的源。
- manifest-src:
- 指定了允许加载的 Web 应用程序清单的源。
- worker-src:
- 指定了允许加载的 Web Workers 的源。
- base-uri:
- 指定了页面中 <base>标签的允许源。
- plugin-types:
- 指定了允许加载的插件类型。
- sandbox:
- 为页面提供了一个安全的沙箱环境,可以限制脚本、表单提交等行为。
- navigate-to:
- 指定了允许页面导航到的源。
- prefetch-src:
- 指定了允许预加载的资源的源。
- report-uri:
- 指定了 CSP 违规报告发送到的 URI。
- report-to:
- 指定了 CSP 违规报告发送到的报告端点的名称。
- upgrade-insecure-requests:
- 指示浏览器将所有 HTTP 请求升级为 HTTPS 请求。
- block-all-mixed-content:
- 阻止所有混合内容(即在 HTTPS 页面上加载的 HTTP 资源)。
- referrer:
- 控制发送到请求中的 Referer 头部。
- policy-uri:
- 提供了一个指向当前策略的 URI,供浏览器在需要时获取。
这些指令可以组合使用,以创建一个全面的 CSP 策略。接下来再聊聊CSP的使用:
(1)在HTTP Header上使用,这个是首选,在header头里加一些配置:
http头信息的字段
"Content-Security-Policy:" 策略
"Content-Security-Policy-Report-Only:" 策略
(2) 在HTML上使用
<meta http-equiv="content-security-policy"content="策略"> <metahttp-equiv="content-securitu-policy-report-only" content="策略">
Meta标签与HTTP头只是形式不同,但是作用是一致的,如果HTTP头与Meta定义同时存在,则优先采用HTTP中的定义。
如果用户浏览器已经为当前文档执行了一个CSP的策略,则会跳过Meta的定义,如果meta标签缺少content属性也同样会跳过。
CSP样例:
// 限制所有的外部资源,都只能从当前域名加载
Content-Security-Policy: default-src 'self'
// default-src 是CSP 指令,多个指令之间用英文分号分割;多个指令值用英文空格分割
Content-Security-Policy: default-src https://host1.com https://host2.com;frame-src 'none'; object-src 'none'
// 错误写法,第二个指令将会被忽略
Content-Security-Policy: script-src https://host1.com; script-srchttps://host2.com
// 正确写法如下
Content-Security-Policy: script-src https://host1.com https://host2.com
// 通过report-uri指令指示浏览器发送JSON格式的拦截报告到某个地址
Content-Security-Policy: default-src 'self'; ...; report-uri/my_amazing_csp_report_parser;
CSP自查表:
指令 |
指令样例 |
指令说明 |
指令值示例 |
指令值说明 |
default-src |
default-src 'self'; |
定义大多数资源的默认允许源 |
'self', https://example.com |
'self'表示同源;具体域名表示允许加载资源的域名 |
script-src |
script-src 'self' https://cdn.com; |
指定允许加载和执行脚本的源 |
'self', https://trusted.cdn.com |
允许的脚本资源来源 |
style-src |
style-src 'self' 'unsafe-inline'; |
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)