新建ASP.NET MVC5项目出现Content Security Policy问题求助
原因分析
这个错误是**Content Security Policy(CSP,内容安全策略)**拦截了内联脚本执行导致的。
默认情况下,MVC5项目模板里包含内联JavaScript代码(比如页面<script>标签中直接编写的代码,而非引用外部脚本文件);而Chrome等现代浏览器会自动应用默认CSP规则,或是项目调试环境、隐性配置触发了CSP限制,当前生效的规则script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules'仅允许加载同域脚本、WebAssembly相关的unsafe-eval操作,以及内联推测规则脚本,普通内联脚本不在允许范围内,因此被拦截。
修复方法
方案1:添加脚本哈希值(推荐,安全性高)
错误提示中已经给出了被拦截内联脚本的哈希值:sha256-dLJqJSO80JC9QgrIRU3rSxbpAb/bYXylIngicy7GOgY=,将其加入CSP的script-src指令即可允许该特定内联脚本执行。
在项目的Web.config中添加自定义HTTP头配置:
<system.webServer> <httpProtocol> <customHeaders> <add name="Content-Security-Policy" value="script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules' 'sha256-dLJqJSO80JC9QgrIRU3rSxbpAb/bYXylIngicy7GOgY=';" /> </customHeaders> </httpProtocol> </system.webServer>
方案2:临时允许所有内联脚本(仅开发环境测试用,不推荐生产)
如果只是开发阶段临时调试,可以添加'unsafe-inline'到script-src规则中,但生产环境禁用此方法(会大幅降低页面安全性):
<system.webServer> <httpProtocol> <customHeaders> <add name="Content-Security-Policy" value="script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules' 'unsafe-inline';" /> </customHeaders> </httpProtocol> </system.webServer>
方案3:移除内联脚本(最规范的长期方案)
找到项目中所有内联脚本(比如布局页、视图里的<script>代码块),将其提取到单独的.js文件中,再通过<script src="脚本路径"></script>引用。这种方式既符合CSP安全规范,也能让代码结构更清晰。
方案4:排查外部干扰因素
部分浏览器安全扩展(如广告拦截器、隐私插件)会强制添加CSP规则,导致本地调试出现问题。可以尝试禁用所有浏览器扩展,或使用隐身模式打开页面;也可以检查VS调试设置,确认是否强制启用了CSP相关安全策略。
内容的提问来源于stack exchange,提问作者chris_dev

