Content Security Policy仅在Firefox中失效,求技术解决方案
以下是修复你的.htaccess中CSP配置在Firefox失效问题的具体步骤:
修复Nonce配置
Firefox对CSP中非ce的有效性校验比其他浏览器更严格,固定值的nonce(如你当前用的'nonce-scrline')会被判定为无效。Nonce必须是每次请求随机生成的Base64编码字符串,且仅在当前请求周期内有效。需修改后端代码,动态生成随机nonce并注入到页面的style标签中,同时同步更新CSP头中的nonce值。替换Header指令
Apache的Header set仅在HTTP 2xx响应中添加头信息,而Firefox在处理非2xx响应(如3xx跳转)时可能也需要CSP规则生效。将配置中的Header set替换为Header always set,确保所有响应都携带CSP头:Header always set Content-Security-Policy "default-src 'none'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' cloudflareinsights.com; img-src 'self' i.ytimg.com; font-src 'self'; frame-src 'self' *.youtube.com; object-src 'none'; script-src 'self' ajax.cloudflare.com static.cloudflareinsights.com; style-src 'self' 'nonce-动态生成值' *.googleapis.com 'sha256-OnKjgfO74jp5PdYX4b31P2gAs34UqQ1Nl3hDLfxVu1Y='; form-action 'self'; media-src 'self'"添加child-src兼容规则
尽管CSP 3规范中frame-src已被child-src替代,但Firefox对旧规则的兼容性处理存在差异。可在CSP中同时添加child-src规则,覆盖iframe等子资源的加载:Header always set Content-Security-Policy "default-src 'none'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' cloudflareinsights.com; img-src 'self' i.ytimg.com; font-src 'self'; frame-src 'self' *.youtube.com; child-src 'self' *.youtube.com; object-src 'none'; script-src 'self' ajax.cloudflare.com static.cloudflareinsights.com; style-src 'self' 'nonce-动态生成值' *.googleapis.com 'sha256-OnKjgfO74jp5PdYX4b31P2gAs34UqQ1Nl3hDLfxVu1Y='; form-action 'self'; media-src 'self'"验证哈希值准确性
确认style-src中的SHA256哈希与页面内联样式的实际哈希完全匹配。Firefox对哈希计算严格遵循规范,需确保哈希基于内联样式的原始文本(不含style标签本身),且使用SHA256算法的Base64编码格式。可直接从Firefox控制台的拦截提示中获取正确的哈希值。检查Apache配置语法
确认.htaccess中的CSP配置无语法错误,比如引号嵌套是否正确、域名通配符(如*.youtube.com)使用是否合规。确认Firefox本地设置
在Firefox地址栏输入about:config,搜索security.csp.enable确保值为true;若开启了security.csp.strict,可临时关闭测试是否解决问题。
内容的提问来源于stack exchange,提问作者Miramez

