我必须启用CSP并允许运行内联脚本。我一直在尝试各种事情,但我仍然收到了CSP警告在开发控制台。
内容安全策略:页面设置阻止内联资源的加载(“默认-src”)内容安全策略:页面设置阻止内联资源的加载(“script-src”)
我一直在尝试用nonce实现CSP,并且在我的apache设置中有下面的内容。
LoadModule unique_id_module modules/mod_unique_id.so //generates unique nonce for each http request
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-%{UNIQUE_ID}e' 'unsafe-eval';"
上面的apache设置生成一个唯一的id,然后我将其传递给我的内联JS <script nonce="<?= $_SERVER['UNIQUE_ID'] ?>">
。
但在控制台上仍然会出现错误。
Content Security Policy: Couldn’t parse invalid host 'nonce-X@KFhfNmoeAb3yfsstqrgQAAAMc'
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“default-src”)
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“script-src”)
请注意,我不打算使用不安全的内联,因为这不会解决CSP的目的。
根据Granty的回答,我现在尝试使用csp_nonce模块。并在我的apache配置中有以下内容
LoadModule headers_module modules/mod_headers.so
LoadModule cspnonce_module modules/mod_cspnonce.so
Header set Content-Security-Policy "script-src 'self' 'nonce-%{CSP_NONCE}e' 'unsafe-eval';"
内联脚本标记现在包含CSP_NONCE变量。
然而,我仍然在控制台中遇到一些错误。
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“script-src”).
如果有什么帮助,TIA
发布于 2020-12-23 06:04:21
mod_unique_id
不适合生成'nonce'
,因为生成的ID中有@字符。
您的'nonce-X@KFhfNmoeAb3yfsstqrgQAAAMc'
令牌有不允许字符@。您可以使用斯潘塞代替。它根据CSP规范,通过密码algo生成有效的当前值。
PS:正如我所看到的,Content Security Policy: The page’s settings blocked the loading of a resource at inline (“default-src”)
--在使用default-src
作为script-src
的后盾时要小心。火狐有一个错误:'nonce-value'
在default-src
指令中做不覆盖 'unsafe-inline'
。
https://stackoverflow.com/questions/65417404
复制相似问题