内容安全策略(Content Security Policy)

内容安全策略(Content Security Policy)


CSP


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

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

CSP由Mozilla开发,曾经有几年试验过概念,一开始称为内容限制(content restriction),后来改称为内容安全策略。2012年11月CSP 1.0成为W3C的候选议案。

网站通过设置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’


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


浏览器支持

当前浏览器对CSP的支持较好。Chrome和Firefox试验了多年,而且最近其他主流浏览器也逐步开始支持。桌面浏览器里面唯一不支持CSP的是Internet Explorer。Microsoft的新一代浏览器Edge,在Windows 10中首次亮相,支持CSP 1.0。


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Content-Security-Policy (CSP) 是一种HTTP头部字段,用于帮助Web应用增强安全性,控制网页内容如何加载和执行。CSP允许开发者定义一系列规则,限制浏览器加载资源的来源、类型以及执行的脚本和样式等行为。这有助于防止跨站脚本攻击(XSS)、恶意代码注入、数据泄露等问题。 设置CSP主要包括以下几个关键点: 1. **基本策略**: 使用`content-security-policy`头部字段声明,例如: ``` Content-Security-Policy: default-src 'self'; ``` 这表示只允许从当前源加载内容。 2. **源策略**: `default-src`可以指定一组或单独的源,如: ``` default-src 'self' https: data:; ``` 这里指定了除了'self'之外还允许https和data:协议的资源加载。 3. **资源类型**: 可以使用`script-src`, `style-src`, `img-src`, `frame-src`等指令分别控制不同类型的资源加载来源。 4. **允许特定资源**: `connect-src`控制连接请求(如WebSocket),`font-src`控制字体资源,`media-src`控制媒体资源等。 5. **执行策略**: `script-src-elem`和`script-nonce`用于处理内联脚本,`child-src`管理嵌套框架。 6. **报告策略**: `report-uri`指定当违反策略时发送报告的URL,以便开发者收集安全事件信息。 7. **沙箱模式**: 使用`sandbox`属性或`sandbox`-related directives如`allow-scripts`、`allow-top-navigation`等进一步限制页面行为。 为了确保CSP的有效性,需要在服务器端配置并始终发送这个头部信息给客户端。同时,开发人员也需要遵循CSP策略来编写代码,避免潜在的安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值