You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET客户侧部署报Content Security Policy错误解决方法

问题原因

客户侧服务端开启了严格的内容安全策略(CSP),默认规则default-src 'self'作为兜底策略拦截了页面内的内联脚本执行。内联脚本通常承担页面初始化、样式动态渲染的逻辑,执行失败后就会出现全浏览器样式错位的问题。DEV、QA环境未配置严格CSP规则,因此不会出现该拦截。

控制台报错原文:

Refused to execute inline script because it violates the following Content Security Policy directive: "default-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-yP/phO6MWRqPDsL5fwP/+7pIbMUdA+zgVlj8/r2BJDo='), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.

修复方案

按安全优先级从高到低,三选一即可:

方案1:Nonce动态授权(生产环境长期推荐)

安全等级最高,不会降低XSS防护能力,适配所有ASP.NET版本:

  • 服务端为每个请求生成加密安全的唯一随机字符串作为nonce值,禁止跨请求复用
  • 配置CSP响应头,新增独立的script-src规则:script-src 'self' 'nonce-当前请求生成的nonce值'
  • 给页面内所有<script>内联标签添加nonce="对应请求的nonce值"属性
  • ASP.NET Core可直接使用内置CSP中间件配合Tag Helper自动完成nonce注入,无需手动逐个修改脚本标签;ASP.NET Framework可在Global.asax的请求管道中统一完成nonce生成、响应头配置和标签注入。

方案2:哈希值固定授权(适合内联脚本少且内容固定的场景)

安全等级中等,无需修改页面标签:

  • 控制台报错已经给出被拦截内联脚本的SHA256哈希值:sha256-yP/phO6MWRqPDsL5fwP/+7pIbMUdA+zgVlj8/r2BJDo=
  • 配置CSP响应头,新增script-src规则:script-src 'self' 'sha256-yP/phO6MWRqPDsL5fwP/+7pIbMUdA+zgVlj8/r2BJDo='
  • 刷新页面后如果控制台还有新的CSP拦截报错,把新报错里的哈希值按同样格式追加到script-src规则后即可,直到所有内联脚本都被放行
  • 注意:只要内联脚本内容发生任意修改,对应的哈希值就会失效,需要重新计算新哈希更新CSP配置。

方案3:放开内联脚本限制(紧急排障临时用)

安全等级最低,配置后和DEV/QA环境策略一致,可快速恢复访问:

  • 直接修改CSP响应头,配置script-src 'self' 'unsafe-inline'
  • 该规则会允许所有内联脚本执行,能立刻解决拦截问题,但会大幅降低CSP对XSS攻击的防护能力,不建议在客户生产环境长期使用。
配置注意事项
  • 优先单独配置script-src规则,不要直接修改default-src的默认值,避免影响样式、图片、接口请求等其他资源的加载策略
  • 配置完成后可在浏览器开发者工具的网络面板中,查看首页响应头的Content-Security-Policy字段,确认规则已生效,再排查控制台是否还有剩余报错
  • 如果客户侧是通过IIS站点的HTTP响应头功能统一配置的CSP,直接在IIS对应站点修改配置即可,无需重新发布项目;如果CSP规则是写在项目代码的中间件、过滤器中,修改代码后重新发布即可。

内容的提问来源于stack exchange,提问作者user768853

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:12:31