.htaccess配置Content Security Policy(CSP)未生效求助
检查服务器全局配置
如果你用Apache,去主配置文件(比如httpd.conf、apache2.conf)或者站点专属的.conf文件(比如sites-available目录下的配置)里找找有没有Header add Content-Security-Policy或Header set Content-Security-Policy的规则——全局配置优先级比.htaccess高,会覆盖你本地的设置。要是用Nginx,就检查nginx.conf或站点配置里的add_header Content-Security-Policy指令。查看应用程序层面的硬编码配置
不少框架(比如WordPress、Django、Laravel)或者插件会直接通过代码输出CSP响应头,比如PHP里的header()函数、Python的response.headers,甚至主题文件里也可能藏着。去看看你的应用代码、插件设置,有没有硬写的CSP规则。确认当前生效的CSP规则
打开浏览器开发者工具(F12)切到“网络”面板,刷新页面后看请求的响应头,找到Content-Security-Policy或者Content-Security-Policy-Report-Only头,看看具体规则是什么——这能直接帮你定位到底哪条配置在生效。如果看到多个CSP头,说明存在多份配置,浏览器会执行最严格的那套规则。排查CDN或安全工具的自动注入
要是用了Cloudflare这类CDN,它们的安全模块可能自动添加CSP,去CDN的安全设置里看看有没有开启相关选项。另外服务器上的ModSecurity这类安全软件,也可能强制注入CSP规则,得检查这类工具的配置。优化你的.htaccess配置
你现在用的是Header add,如果已经有其他CSP配置,会导致多个头共存,建议改成Header set来覆盖已有规则:<IfModule mod_headers.c> Header set Content-Security-Policy "script-src-elem 'self' 'unsafe-inline' data: https://apis.google.com https://calendar.google.com https://www.google.com/recaptcha https://www.gstatic.com/recaptcha;" </IfModule>另外别写具体的recaptcha版本文件路径(比如
I0bG74fWAenNf3Z5ncHSz-bd/recaptcha__en.js),谷歌会更新版本,用域名前缀更稳妥,避免后续版本更新又出问题。
内容的提问来源于stack exchange,提问作者George McNally

