内容安全策略(CSP)粒度问题:'unsafe-eval'是否全局适用于所有脚本?
关于CSP中
unsafe-eval作用范围的解析 嘿,这个问题抓得很准!很多人刚接触CSP时都会搞不清这类关键字的作用范围,我给你一步步拆解清楚:
先把你给出的CSP配置贴出来方便对照:
default-src 'none'; script-src 'self' 'unsafe-eval' https://maps.googleapis.com; style-src 'self' https://fonts.googleapis.com 'unsafe-inline';
核心结论
'unsafe-eval'不是仅适用于'self'来源的脚本,而是对script-src指令下所有被允许的脚本来源都生效。
详细解释
在CSP的指令逻辑里,像script-src这类资源指令的各个值属于一个许可集合,彼此是并列关系,不存在“关键字绑定某个来源”的情况:
'self'允许加载当前同源的脚本文件https://maps.googleapis.com允许加载谷歌地图域名下的脚本文件'unsafe-eval'是权限类关键字,作用是放开动态代码执行的限制——只要脚本来自script-src里允许的来源(不管是同源还是谷歌地图的),都可以使用eval()、new Function()、setTimeout(string)这类依赖动态代码解析的功能。
关于配置粒度
这个CSP的粒度是按资源类型指令划分的:
- 每个指令(比如
script-src管脚本、style-src管样式)独立控制对应资源的规则 - 指令内部的来源和权限关键字共同定义该资源类型的允许范围,权限关键字是全局作用于整个指令的,而非绑定单个来源。
内容的提问来源于stack exchange,提问作者Darragh
相关产品推荐
相关产品推荐

