内容安全策略 ( CSP )

内容安全策略 ( CSP )_第1张图片

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

CSP 被设计成完全向后兼容,不支持 CSP 的浏览器也能与实现了 CSP 的服务器一样正常运行,只是在不支持 CSP 的浏览器会忽略它,默认为网页内容使用标准的同源策略。如果网站不提供 CSP 头部,浏览器也使用标准的同源策略。

为使 CSP 可用,你需要配置你的网络服务器返回 Content-Security-Policy HTTP 头部 ( 有时你会看到一些关于X-Content-Security-Policy头部,那是旧版本)。

除此之外,  元素也可以被用来配置该策略,例如

跨站脚本攻击

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

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

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

除限制可以加载内容的域,服务器还可指明哪种协议允许使用;比如 (从理想化的安全角度来说),服务器可指定所有内容必须通过 HTTPS 加载。

使用 CSP

配置内容安全策略涉及到添加 Content-Security-Policy HTTP 头部到一个页面,并配置相应的值,以控制用户代理(浏览器等)可以为该页面获取哪些资源。

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

Content-Security-Policy: policy

policy 参数是一个包含了各种描述你的 CSP 策略指令的字符串。

描述策略

一个策略由一系列策略指令所组成,每个策略指令都描述了一个针对某个特定类型资源以及生效范围的策略。一个策略可以包含 default-src 或者 script-src 指令来防止内联脚本运行,并杜绝 eval() 的使用。一个策略也可包含一个 default-src 或 style-src 指令去限制来自一个