0x01 简介
CSP,全称Content Security Policy
,内容安全策略,是一个附加的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS
) 和数据注入攻击等
CSP的特点就是他是在浏览器层面做的防护,是和同源策略同一级别,除非浏览器本身出现漏洞,否则不可能从机制上绕过
有两张方式启用 CSP :
- 设置 HTTP 头的
Content-Security-Policy
字段 -
<meta>
元素也可以被用来配置该策略
1. 设置 HTTP 头的 Content-Security-Policy
字段
你可以使用
Content-Security-Policy: policy
来制定你的策略
policy
参数是一个包含了各种描述你的CSP策略指令的字符串策略指令
策略指令分很多种,每种指令都分管浏览器中请求的一部分
常用指令 | 说明 |
---|---|
child-src |
为 web workers和其他内嵌浏览器内容定义 合法的源 |
connect-src |
定义 AJAX、WebSocket等加载策略 |
default-src |
定义资源默认加载策略 |
font-src |
限制通过@font-face 加载的字体源 |
frame-src |
限制通过类似<frame> 和<iframe> 标签加载的内嵌内容源 |
img-src |
限制图片和图标源 |
script-src |
限制javascript 源 |
style-src |
限制 CSS 加载源 |
object-src |
限制通过 <object> , <embed> ,<applet> 标签加载源 |
media-src |
限制通过<audio> 或<video> 标签加载的媒体文件源 |
sandbox |
允许类似{HTMLElement("iframe")}} sandbox sandbox 属性 |
report-uri |
值为 /report-uri ,提交日志 |
每种指令都有不同的配置,例如:
-
default-src 'self'
#'self'
指向与要保护的文件所在的源,包括相同的 URL scheme 与端口号。必须有单引号 -
default-src 'unsafe-eval'
#'unsafe-eval'
允许使用eval()
以及相似的函数来从字符串创建代码。必须有单引号。
针对不同来源,不同方式的资源加载,都有相应的加载策略
2. <meta>
元素也可以被用来配置该策略
例如:
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
0x02 示例:常见用例
- 所有内容均来自站点的同一个源 (不包括其子域名)
Content-Security-Policy: default-src 'self'
- 允许内容来自信任的域名及其子域名 (域名不必须与CSP设置所在的域名相同)
Content-Security-Policy: default-src 'self' *.trusted.com
- 确保网站的所有内容都要通过SSL方式获取,以避免攻击者窃听用户发出的请求
Content-Security-Policy: default-src https://onlinebanking.jumbobank.com
- 只允许加载当前域的js
header("Content-Security-Policy: default-src 'self'; script-src 'self' ");
0x03 ref
Content Security Policy (CSP)
Content-Security-Policy
前端防御从入门到弃坑--CSP变迁