内容安全策略CSP(Content-Security-Policy)

内容安全策略(CSP),其核心思想十分简单:网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的与什么是需要被禁止的。其被誉为专门为解决XSS攻击而生的神器。

1.前言

内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。

CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

2.CSP作用

限制资源获取

报告资源获取越权

3.限制方式

default-src限制全局

制定限制类型

资源类型有:connect-src、mainfest-src、img-src、font-src、media-src、style-src、frame-src、script-src…

4.应对威胁

4.1 跨站脚本攻击

CSP 的主要目标是减少和报告 XSS 攻击 ,XSS 攻击利用了浏览器对于从服务器所获取的内容的信任。恶意脚本在受害者的浏览器中得以运行,因为浏览器信任其内容来源,即使有的时候这些脚本并非来自于它本该来的地方。

CSP通过指定有效域——即浏览器认可的可执行脚本的有效来源——使服务器管理者有能力减少或消除XSS攻击所依赖的载体。一个CSP兼容的浏览器将会仅执行从白名单域获取到的脚本文件,忽略所有的其他脚本 (包括内联脚本和HTML的事件处理属性)。

作为一种终极防护形式,始终不允许执行脚本的站点可以选择全面禁止脚本执行。

4.2 数据包嗅探攻击

除限制可以加载内容的域,服务器还可指明哪种协议允许使用;比如 (从理想化的安全角度来说),服务器可指定所有内容必须通过HTTPS加载。一个完整的数据安全传输策略不仅强制使用HTTPS进行数据传输,也为所有的cookie标记安全标识 cookies with the secure flag,并且提供自动的重定向使得HTTP页面导向HTTPS版本。网站也可以使用 Strict-Transport-Security HTTP头部确保连接它的浏览器只使用加密通道。

5.CSP使用

CSP分类:

(1)Content-Security-Policy
配置好并启用后,不符合 CSP 的外部资源就会被阻止加载。
(2)Content-Security-Policy-Report-Only
表示不执行限制选项,只是记录违反限制的行为。它必须与report-uri选项配合使用。

CSP的使用:

(1)在HTTP Header上使用(首选)

"Content-Security-Policy:" 策略
"Content-Security-Policy-Report-Only:" 策略

(2)在HTML上使用

<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">

Meta 标签与 HTTP 头只是行式不同而作用是一致的,如果 HTTP 头与 Meta 定义同时存在,则优先采用 HTTP 中的定义。
如果用户浏览器已经为当前文档执行了一个 CSP 的策略,则会跳过 Meta 的定义。如果 META 标签缺少 content 属性也同样会跳过。

CSP使用实例:

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

在这里,各种内容默认仅允许从文档所在的源获取, 但存在如下例外:

4.一个线上银行网站的管理者想要确保网站的所有内容都要通过SSL方式获取,以避免攻击者窃听用户发出的请求。

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 指令的对其进行配置,这也同样意味着脚本文件仅允许从原始服务器获取。

6.CSP的报告(report-only)模式

为降低部署成本,CSP可以部署为报告(report-only)模式。在此模式下,CSP策略不是强制性的,但是任何违规行为将会报告给一个指定的URI地址。此外,一个报告模式的头部可以用来测试一个修订后的未来将应用的策略而不用实际部署它。

你可以用Content-Security-Policy-Report-Only HTTP 头部来指定你的策略,像这样:

Content-Security-Policy-Report-Only: policy

如果Content-Security-Policy-Report-Only 头部和 Content-Security-Policy 同时出现在一个响应中,两个策略均有效。在Content-Security-Policy 头部中指定的策略有强制性 ,而Content-Security-Policy-Report-Only中的策略仅产生报告而不具有强制性。

支持CSP的浏览器将始终对于每个企图违反你所建立的策略都发送违规报告,如果策略里包含一个有效的report-uri 指令。

默认情况下,违规报告并不会发送。为启用发送违规报告,你需要指定 report-uri 策略指令,并提供至少一个URI地址去递交报告:

Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi

然后你需要设置你的服务器能够接收报告,使其能够以你认为恰当的方式存储并处理这些报告。

参考文章:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP#示例_2

http://www.ruanyifeng.com/blog/2016/09/csp.html

https://blog.csdn.net/qq_37943295/article/details/79978761

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策略来编写代码,避免潜在的安全风险。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值