Content-Security-Policy
Content-Security-Policy: script-src 'self' https://apis.google.com
CSP-Header for different source
base-uri: 用于限制可在页面的<base>元素中显示的网址child-src: 用户累出适用于网络县城和嵌入frame的网址。connect-src: 用于限制可连接(XHR, WebSockets, EventSource)的来源。font-src: 用于制定可提供网页字体的来源。form-action: 用户列出可从标记提交的有效端点。frame-ancestors: 用户制定可嵌入当前页面的来源。此指令适用于<frame>、<iframe>、<embed>和<applet>标记。此指令不能在<meta>标记中使用,并仅适用于非 HTML 资源。frame-src: 已弃用,改用child-src。img-src: 用于定义可从中加载图像的来源。media-src: 用于限制允许传输视频和音频的来源。object-src: 可对 Flash 和其他插件进行控制。plugin-types: 用于限制页面可以调用的插件种类。report-uri: 用于制定在违反内容安全策略时浏览器向其发送报告的地址。此指令不能用于<meta>标记。style-src是script-src版的样式表。upgrade-insecure-requests: 指示 User Agent 将 HTTP 更改为 HTTPS,重写网址架构。[这个指令可以修复页面中混入的资源]block-all-mixed-content: 用户限制页面访问不同协议的资源,例如在HTTPS的协议下无法获取使用HTTP协议的资源。work-src: 是 CSP Level 3 的指令,用于限制 worker, shared worker 和 service worker。
CSP value for header
'none': 不匹配。'self': 匹配当前源,但是不包括子域名。'unsafe-inline': 允许内敛 JS 和 CSS。'unsafe-eval': 允许 text-to-Javascript 机制。'sandbox': 该指令与我们看到的其他指令有些不同,因为它限制的是页面可进行的操作,而不是页面可加载的资源。
Config CSP with the meta tag
<meta
http-equiv="Content-Security-Policy"
content="
default-src https://cdn.example.net;
child-src 'none';
object-src 'none'"
>
frame-ancestors, report-uri, or sandbox 无法通过meta来配置。
防御XSS攻击
内敛脚本的执行是XSS攻击的常用手段,通过严格的CSP配置可以防止内敛脚本的执行,同时也能通过对应的 form-action 来限制跨域表单的提交问题。
如果一定要使用内敛脚本,可以配置 script-src: 'unsafe-inline' 来允许内敛脚本的运行,但是最好在对应的执行script标签上添加对应的nonce来添加进一步的许可,这样能更好的防范XSS。
Content Security Policy | Web Fundamentals | Google Developers