http协议_CSP(Content-Security-Policy 内容安全策略)

欧照
2023-12-01

http协议中的内容安全策略是为了让网站更加安全.

内容安全策略(Content Security Policy)是一种声明的安全机制,可以让网站运营者能够控制遵循CSP的用户代理(通常是浏览器)的行为。通过控制要启用哪些功能,以及从哪里下载内容,可以减少网站的攻击面。

CSP的主要目的是防御跨站点脚本(cross-ste scripting,XSS)攻击。例如,CSP可以完全禁止内联的JavaScript,并且控制外部代码从哪里加载。它也可以禁止动态代码执行。禁用了所有的攻击源,XSS攻击变得更加困难。

作用

  • 限制网页中资源的获取
  • 报告资源获取越权

限制方式

通过设置Content-Security-Policy响应头启用所需的CSP策略。

Content-Security-Policy: default-src ‘self’; img-src *;
                         object-src *.cdn.chziyue.com;
                         script-src scripts.chziyue.com

该策略默认只允许资源从同一来源加载,但允许图像从任何URI加载,插件内容只从指定的CDN地址加载,外部脚本仅从scripts.chziyue.com加载。

不像HSTS,CSP策略不是持久的;只在引用他们的页面上生效,之后就消失了。因此,使用CSP风险要小很多。如果产生错误,策略可以立即更新生效。即使被注入响应头,也不会有持续性拒绝服务攻击的风险。

 

防止混合内容问题

如果安全网页依赖的资源(例如,图像和脚本)是通过明文连接检索的,就会出现混合内容问题。这些年浏览器虽然对这个问题的处理有改善,但它们的方法通常仍然太过宽松。例如,所有浏览器都允许所谓的被动式混合内容(passive mixed content),通常是图像。不出的是,在不同浏览器上也有处理差异。例如,Safari目前不强加任何限制,甚至对脚本也是。

因为CSP让我们能够控制其中的内容来源,所以可以用它来指导遵循CSP的浏览器只使用安全协议,也就是对WebSocket协议用wss,剩下的其他都用https。

因此,只解决混合内容问题,而不尝试改善其他的话,可以考虑下面的CSP策略作为出发点:

Content-Security-Policy: default-src https: 'unsafe-inline' 'unsafe-eval';
             connect-src https: wss:

该策略包括以下三个主要内容:

  • default-src指令确定该页面可以从任何地方(任何主机和任何端口)加载提供了安全连接(https)的内容

  • ‘unsafe-inline’和‘unsafe-eval’表达式重新启用内联JavaScript和动态代码执行,这些默认情况下都是被CSP禁用的。理想情况下,通常不会希望在策略里保留这些表达式,但没有它们大多数现有的应用都会被阻断。

  • connect-src指令控制脚本接口(本如XMLHttpRequest、WebSockets、EventEource等)所使用的内容位置。

一旦确立了最初的策略可以工作,请考虑收紧JavaScript执行(通过删除‘unsafe-inline’和’unsafe-eval’表达式),并用更具体的主机取代通用源的限制(例如,使用https://cdn.chziyue.com取代https)。

 

策略测试

有关CSP的一个好处是,能够在执行一个策略的同时并行测试其他策略。这意味着,可以在比开发环境要复杂得多的生产环境中部署测试策略。

Content-Security-Policy-Report-Only响应头用于创建一个仅用于测试的策略:

Content-Security-Policy-Report-Only: default-src ‘self’

如果只启用报告的策略出错,并不会阻塞请求,但可以配置报告使得故障可被传递回起初的网站。

 

 

参考

内容安全策略(Content Security Policy)

https://developer.mozilla.org/zh-CN/docs/Web/Security/CSP

 类似资料: