Apache 2中Content Security Policy的script-src权限问题求助
解决CSP中
unsafe-eval相关的脚本加载错误 问题原因
你的报错信息明确指出:浏览器拒绝执行字符串形式的JavaScript代码,因为当前CSP的script-src指令未允许unsafe-eval来源。这种情况通常是页面中的JS使用了eval()、new Function()、setTimeout("字符串代码")、setInterval("字符串代码")这类将字符串当作JS执行的方法,而这类操作默认被CSP拦截。
另外注意到报错里显示的指令是script-src 'self',这可能是你的CSP配置未正确生效——比如存在其他优先级更高的CSP设置(如页面meta标签中的CSP),或者Apache的Header set指令被Header always set覆盖,建议统一使用Header always set来定义CSP,避免冲突。
解决方案
添加
unsafe-eval到script-src
在你的script-src规则中加入'unsafe-eval',允许字符串形式的JS执行。优化配置(可选但推荐)
你当前的script-src写了*(允许所有来源),这会大幅降低CSP的安全防护能力。建议替换*为实际需要加载的外部JS域名(比如谷歌标签管理器、谷歌分析的域名),最小化安全风险。
修改后的Apache虚拟主机CSP配置示例
Header set X-Content-Type-Options: "nosniff" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # 统一使用Header always set确保CSP生效,同时优化script-src规则 Header always set Content-Security-Policy "default-src 'self' https:// 你的其他必要域名; img-src 'self' www.googletagmanager.com ; style-src 'self' 'unsafe-inline' ; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com https://www.google-analytics.com; connect-src 'self' https://www.google-analytics.com https://www.googletagmanager.com/gtag/js ; object-src 'self'; form-action 'self' " Header set X-Frame-Options: "sameorigin" Header set X-XSS-Protection "1; mode=block" Options FollowSymLinks MultiViews AllowOverride All
额外提示
unsafe-eval会引入安全风险,建议先排查页面中的JS代码,尝试替换掉eval()等用法(比如改用直接函数调用、JSON.parse处理数据等),只有在无法替换的情况下再添加该指令。
内容的提问来源于stack exchange,提问作者Laurent Fourny
相关产品推荐
相关产品推荐

