
文章插图
如果页面中非得用内联的写法 , 还有种方式 。即页面中这些内联的脚本或样式标签 , 赋值一个加密串 , 这个加密串由服务器生成 , 同时这个加密串被添加到页面的响应头里面 。
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa"> // 这里放置内联在 HTML 中的代码</script> 页面 HTTP 响应头的 Content-Security-Policy配置中包含相同的加密串:Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
文章插图
配置示例示例 1所有内容均来自站点的同一个源 (不包括其子域名)
Content-Security-Policy: default-src 'self'
示例 2允许内容来自信任的域名及其子域名 (域名不必须与CSP设置所在的域名相同)
Content-Security-Policy: default-src 'self' *.trusted.com
示例 3允许网页应用的用户在他们自己的内容中包含来自任何源的图片, 但是限制音频或视频需从信任的资源提供者(获得) , 所有脚本必须从特定主机服务器获取可信的代码.
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
在这里 , 各种内容默认仅允许从文档所在的源获取, 但存在如下例外:
- 图片可以从任何地方加载(注意 "*" 通配符) 。
- 多媒体文件仅允许从 media1.com 和 media2.com 加载(不允许从这些站点的子域名) 。
- 可运行脚本仅允许来自于userscripts.example.com 。
Content-Security-Policy: default-src https://onlinebanking.jumbobank.com
该服务器仅允许通过HTTPS方式并仅从onlinebanking.jumbobank.com域名来访问文档 。
示例 5一个在线邮箱的管理者想要允许在邮件里包含HTML , 同样图片允许从任何地方加载 , 但不允许JavaScript或者其他潜在的危险内容(从任意位置加载) 。
Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *
注意这个示例并未指定script-src 。在此CSP示例中 , 站点通过 default-src 指令的对其进行配置 , 这也同样意味着脚本文件仅允许从原始服务器获取 。
上报你的数据当检测到非法资源时 , 除了控制台看到的报错信息 , 也可以让浏览器将日志发送到服务器以供后续分析使用 。接收报告的地址可在 Content-Security-Policy 响应头中通过 report-uri指令来配置 。当然 , 服务端需要编写相应的服务来接收该数据 。
配置 report-uri
Content-Security-Policy: default-src 'self'; ...; report-uri /my_amazing_csp_report_parser;`服务端收到请求:{ "csp-report": { "document-uri": "http://example.org/page.html", "referrer": "http://evil.example.com/", "blocked-uri": "http://evil.example.com/evil.js", "violated-directive": "script-src 'self' https://apis.google.com", "original-policy": "script-src 'self' https://apis.google.com; report-uri http://example.org/my_amazing_csp_report_parser" }}Report OnlyCSP 提供了一种报告模式 , 该模式下资源不会真的被限制加载 , 只会对检测到的问题进行上报 , 以 JSON 数据的形式发送到 report-uri 指定的地方 。通过指定 Content-Security-Policy-Report-Only 而不是 Content-Security-Policy , 则开启了报告模式 。
Content-Security-Policy-Report-Only: default-src 'self'; ...; report-uri /my_amazing_csp_report_parser;当然 , 你也可以同时指定两种响应头 , 各自里的规则还会正常执行 , 不会互相影响 。比如:Content-Security-Policy: img-src *;Content-Security-Policy-Report-Only: img-src ‘none’; report-uri http://reportcollector.example.com/collector.cgi这里图片还是会正常加载 , 但是 img-src ‘none’ 也会检测到并且发送报告 。
推荐阅读
- 国产操作系统的曙光?Deepin系统为什么被大家看好
- 电脑装了360之后为什么越来越卡了?电脑小匠教你如何优化360
- 为什么福克斯跑高速稳?
- 深入浅出React.js 性能分析
- 曼蒂科尔为什么叫红茶?[红茶]
- “万人空巷”中为什么街上没有一个人?
- 喝洛神花茶要多久祛斑,办公室白领为什么要常喝花茶
- 为什么说菊花茶并不是人人都适合喝,喝菊花茶的好处
- 为什么贡茶都是中小叶种
- 在办公室常喝这四种花茶,办公室白领为什么要常喝花茶
