上线新的安全策略之后 客服和统计两个脚本都没出来 控制台一条红字 Refused to load the script https://c.example.com/w.js because it violates the directive script-src self 同一份策略在测试站点上却是好的。乍看像缓存或者权限的锅,追下去往往不是。
curl -sI https://e.com | grep -i content-security-policy # 把缺的域名追加到 script-src 例如 https://c.example.com
追下去是这么回事:script-src 里只写了本站域名 等于只允许自己的资源 第三方域名和它内部再拉的子资源都不在白名单 策略一收紧 最先断的就是外部脚本。
碰到「CSP script-src 拦截」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
具体做法是,先在报告里抄下被拦的完整域名 别只按主域放行 子域要单独覆盖;把缺的域名逐个加进 script-src 前先确认协议和端口也能对上;上线前用只报不拦的模式跑一天 看还有哪些地址漏掉。
验收就看一点,客服按钮和统计请求都正常发出 控制台不再出现 Refused to load 的报错 数据也回来了。
