限制可以通过脚本接口加载的url,受限制的API有
-
<a>
标签的ping
属性 -
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
指令指定可以预取或预呈现的有效源
示例
<meta http-equiv=“content-security-policy” content="
prefetch-src https://www.baidu.com/; ">
// 以下资源将不会被预拉取或预渲染
script-src
指令指定 JavaScript 的有效来源。 这不仅包括直接加载到 <script>
元素中的 URL,还包括可以触发脚本执行的内联脚本事件处理程序 (onclick
) 和 XSLT 样式表
特殊可选来源
-
'strict-dynamic'
:严格的动态源代码表达式指定,通过使用nonce或hash将显式给予标记中存在的脚本的信任传播到该根脚本加载的所有脚本。同时,任何允许列表或源表达式(如“self”或“unsafe inline”)都将被忽略 -
'report-sample'
: 要求在违规报告中包含违规代码的样本
示例
<meta http-equiv=“content-security-policy” content="
script-src https://www.baidu.com/; ">
// 以下资源将不会被预拉取或预渲染
// 以下脚本将不会被加载或执行
// 但是可以通过addEventListener方法来调用
document.getElementById(“btn”).addEventListener(‘click’, doSomething);
style-src
指定样式表的有效源
<meta http-equiv=“content-security-policy” content="
style-src https://www.baidu.com/; ">
// 以下样式表将不会被加载或应用
文档型指令
base-uri
限制可在文档的<base>
元素中使用的URL
特殊可选来源
-
'strict-dynamic'
:严格的动态源代码表达式指定,通过使用nonce或hash将显式给予标记中存在的脚本的信任传播到该根脚本加载的所有脚本。同时,任何允许列表或源表达式(如“self”或“unsafe inline”)都将被忽略 -
'report-sample'
: 要求在违规报告中包含违规代码的样本
示例
// 控制台将会报错,改配置将不会被应用
sendbox
为请求的资源启用沙盒,类似于<iframe>
沙盒属性。它对页面的操作应用限制,包括阻止弹出窗口、阻止插件和脚本的执行以及强制执行同一源策略。
允许的配置值
不允许应用上文的[[#可选来源]]
-
allow-downloads
: 允许在用户单击按钮或链接后下载 -
allow-forms
: 允许页面提交表单。 如果不使用该关键字,则不允许进行此操作 -
allow-modals
: 允许页面打开模式窗口 -
allow-orientation-lock
: 允许页面禁用锁定屏幕方向的功能 -
allow-pointer-lock
: 允许页面使用指针锁 API -
allow-popups
: 允许弹出窗口(例如来自 window.open、target=“_blank”、showModalDialog)。 如果未使用此关键字,则该功能将默默地失败。 -
allow-popups-to-escape-sandbox
允许沙盒文档打开新窗口,而无需对其强制使用沙盒标志。例如,这将允许安全地对第三方广告进行沙盒处理,而无需对登录页施加相同的限制。 -
allow-presentation
. 允许嵌入程序控制iframe
是否可以启动表示会话 -
allow-same-origin
允许将内容视为来自其正常来源。如果不使用此关键字,则嵌入的内容将被视为来自唯一的来源 -
allow-scripts
: 允许页面运行脚本(但不创建弹出窗口)。如果不使用此关键字,则不允许此操作 -
allow-top-navigation
: 允许页面将内容导航(加载)到顶级浏览上下文。如果不使用此关键字,则不允许此操作。 -
allow-top-navigation-by-user-activation
允许资源浏览顶级浏览上下文,但只有在用户手势启动时才允许
导航型指令
form-action
限制表单提交目标的URL
特殊可选来源
-
'strict-dynamic'
:严格的动态源代码表达式指定,通过使用nonce或hash将显式给予标记中存在的脚本的信任传播到该根脚本加载的所有脚本。同时,任何允许列表或源表达式(如“self”或“unsafe inline”)都将被忽略 -
'report-sample'
: 要求在违规报告中包含违规代码的样本