如何通过日志与拦截逐步移除unsafe-* CSP?双Header失效问题
关于分步移除CSP unsafe-*规则的问题解答
不用直接从步骤1跳到步骤3,你可以通过正确配置双CSP头来实现步骤2的目标——拦截unsafe-eval但仅上报unsafe-inline的违规。
正确的双CSP配置方式
- 强制生效的CSP(Content-Security-Policy):设置为
script-src 'self' 'unsafe-inline';- 这个策略会直接拦截
eval类代码(因为未包含'unsafe-eval'),同时允许内联JS执行,满足你“阻止unsafe-eval”的核心需求。
- 这个策略会直接拦截
- 仅上报的CSP(Content-Security-Policy-Report-Only):设置为
script-src 'self';- 这个策略不会拦截任何内容,但会把所有使用内联JS的行为记录为违规上报,实现“仅上报unsafe-script”的目的。
你之前测试异常的原因
你之前的配置中,内联JS能执行是因为强制策略明确允许了它,而出现的报错是仅上报策略在记录违规的正常表现——浏览器会优先执行符合强制策略的内容,同时上报违反仅上报策略的行为,这并非策略冲突,是双CSP的正常工作逻辑。
后续迁移注意
收集上报数据期间,逐步替换所有内联JS(比如转为外部脚本、使用nonce或hash),等内联JS全部清理完成后,再进入步骤3:将强制CSP改为script-src 'self';,同时移除仅上报CSP即可。
内容的提问来源于stack exchange,提问作者Ludwig Van Beethoven
相关产品推荐
相关产品推荐

