可以防止[[跨站点脚本攻击]]
语法
Content-Security-Policy: ;
指令
获取资源型指令
可选来源
: 因特网主机的名称或IP地址,以及可选的URL方案和/或端口号 某种协议方案,符合该协议的均被视为有效源,例如: http:,
https:,
blob:,
data: 等,注意,必须有冒号
'self': 与当前文档同源(包括相同的URL协议地址和端口号),必须包括单引号
'unsafe-eval' : 允许使用
eval()和类似方法从字符串创建代码。必须包括单引号
'unsafe-hashes':允许启用特定的内联事件处理程序。如果只需要允许内联事件处理程序,而不需要内联
[xss_clean]元素或
__javascript:url,那么这种方法比使用不安全的内联表达式更安全
'unsafe-inline': 允许使用内联资源,例如内联
[xss_clean]元素、
__javascript:url、内联事件处理程序和内联
<style>元素。单引号是必需的
'none' : 引用空集合,即不匹配 url。需要单引号
'nonce-
':使用加密 nonce(一次使用的数字)的特定内联脚本的允许列表。服务器必须在每次传输策略时生成唯一的
nonce值。提供一个不可用的
nonce是至关重要的,因为绕过资源的策略在其他方面是微不足道的。指定
nonce会使现代浏览器忽略“不安全的内联”,这仍然可以为没有
nonce支持的旧浏览器设置
'
- ':脚本或样式的sha256、sha384或sha512散列。此源代码的使用由两部分组成,两部分用破折号分隔:用于创建哈希的加密算法和脚本或样式的base64编码哈希。生成散列时,不要包含 [xss_clean]或
<style>标记,并注意大小写和空格很重要,包括前导或尾随空格
child-src
定义使用 <frame> 和
<iframe> 等元素加载的 Web Worker 和嵌套浏览上下文的有效来,不符合要求的请求将被用户代理视为致命的网络错误
如果要规范嵌套的浏览上下文和worker,应该分别使用
frame src和
worker src指令,而不是
child src。
示例
// 框架里的页面将无法加载connect-src
限制可以通过脚本接口加载的url,受限制的API有
WindowOrWorkerGlobalScope.fetch
XMLHttpRequest
EventSource
Navigator.sendBeacon()
示例
// 以下链接都将不被允许
default-src
该指令用作其他 CSP 获取指令的后备。 对于其它指令,用户代理查找 default-src 指令并为其使用此值
font-src
指令指定使用@font-face 加载的字体的有效来源。
示例
// 以下字体将无法加载
frame-src
指定使用<frame>和
<iframe>等元素加载嵌套浏览上下文的有效源。
示例
见 [[#child-src]],将<meta>中
child-src改为
frame-src即可
img-src
指定图像和favicon的有效源
特殊可选来源
'strict-dynamic':严格的动态源代码表达式指定,通过使用nonce或hash将显式给予标记中存在的脚本的信任传播到该根脚本加载的所有脚本。同时,任何允许列表或源表达式(如“self”或“unsafe inline”)都将被忽略
'report-sample': 要求在违规报告中包含违规代码的样本
示例
<meta http-equiv=“content-security-policy” content="
img-src https://www.baidu.com/; ">
// 以下图片将无法加载

manifest-src
指定哪些manifest可以应用到资源。
示例
<meta http-equiv=“content-security-policy” content="
manifest-src https://www.baidu.com/; ">
// 以下清单文件将无法加载
media-src
指定使用<audio>和
<video>元素加载媒体的有效源。
示例
<meta http-equiv=“content-security-policy” content="
media-src https://www.baidu.com/; ">
// 以下音频与视频将不会被加载和播放
object-src
指定<object>、
<embed>和
<applet>元素的有效源
示例
<meta http-equiv=“content-security-policy” content="
object-src https://www.baidu.com/; ">
// 以下控件将不会被加载
prefetch-src
指令指定可以预取或预呈现的有效源