【问题标题】:Allow inline scripts CSP with Apache允许使用 Apache 的内联脚本 CSP
【发布时间】:2021-04-01 16:06:08
【问题描述】:

我必须启用 CSP 并允许运行内联脚本。 我一直在尝试各种事情,但我仍然在开发者控制台中收到 CSP 警告。

内容安全策略:页面的设置阻止了内联资源的加载(“default-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”)

请注意,我不打算使用 unsafe-inline,因为这不能解决 CSP 的目的。

根据格兰蒂的回答,我现在尝试使用 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

【问题讨论】:

    标签: php apache content-security-policy


    【解决方案1】:

    mod_unique_id不适合生成'nonce',因为生成的ID中有@字符。

    您的'nonce-X@KFhfNmoeAb3yfsstqrgQAAAMc' 令牌具有non allowed character @。 您可以使用mod_cspnonce 代替。它根据 CSP 规范通过加密算法生成有效的 nonce 值。

    PS:我看到Content Security Policy: The page’s settings blocked the loading of a resource at inline (“default-src”) - 使用default-src 作为script-src 的后备时要小心。 Firefox 有一个错误:'nonce-value'default-src 指令中执行 not override 'unsafe-inline'

    【讨论】:

    • 谢谢@granty..我尝试使用 mod_cspnonce 模块。现在我有 Header 设置 Content-Security-Policy "script-src 'self' 'nonce-%{CSP_NONCE}e' 'unsafe-eval';"并且收到一些错误内容安全策略:页面的设置阻止了内联资源的加载(“script-src”)。你能帮忙吗?
    • mod response 应该将%{CSP_NONCE}e 替换为实际生成的值。您是否将LoadModule cspnonce_module modules/mod_cspnonce.so 添加到httpd.conf?而<script nonce="<?php echo $ _SERVER ['CSP_NONCE']; ?>"> 是否将真实的value 插入?
    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2010-12-30
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多