yireo/magento2-csp-whitelist-inline-js

用于自动将内联JS脚本添加到CSP白名单的Magento模块

安装次数: 5,540

依赖关系: 0

建议者: 0

安全: 0

星标: 22

关注者: 5

分支: 0

开放问题: 1

类型:magento2-module

0.1.0 2024-09-04 12:43 UTC

This package is auto-updated.

Last update: 2024-09-06 08:53:40 UTC


README

在Magento 2中,当启用CSP策略以禁止内联脚本时,任何脚本都需要一个哈希或nonce(或类似的东西)。此模块会自动扫描任何PHTML模板中的脚本,并根据您的配置添加nonce。

安装

composer require yireo/magento2-csp-whitelist-inline-js
bin/magento module:enable Yireo_CspWhitelistInlineJs

配置

  • 模式
    • 自定义白名单(推荐)
    • 白名单一切(危险)
  • 日志记录:见下文

模式:自定义白名单

可以使用以下技术之一自动使用此模块将一个块白名单化

1. 通过XML布局进行自定义白名单

您可以通过XML布局添加一个csp_whitelist参数来通过XML布局白名单化特定的block

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:View/Layout:etc/page_configuration.xsd">
    <body>
        <referenceBlock name="head.additional">
            <arguments>
                <argument name="csp_whitelist" xsi:type="boolean">true</argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

请注意,这里仍然存在一个安全问题,因为布局可以通过数据库进行更新(这可能会被SQL注入攻击所劫持)。

2. 通过DI插件

您也可以在\Yireo\CspWhitelistInlineJs\Util\AllowBlock::allow(Template $block)上创建一个DI插件afterAllow

模式:白名单一切

在此模式下,任何内联脚本都将被允许。这违背了CSP的一般目的,但可以完成任务。请确保记录日志,以便您可以在一段时间后使用不同的模式。如果您在生产环境中继续使用此模式,您将无法获得它。

模式:白名单一切

关于白名单一切和安全的重要说明

请注意,使用此模块自动修复内联脚本不会消除CSP原本旨在解决的问题的安全风险。最好的解决方案是使用此模块确保CSP在生产环境中不会造成伤害。然后,检查所有尚未添加CSP支持的内部脚本。然后,再次删除此模块。

关于CMS内容怎么办?

当内容被添加到Magento的HTML输出时,需要设置安全检查。例如,CMS页面或CMS块的内容可能会被黑客攻击,并可能通过向该内容添加内联脚本来发起XSS攻击。默认情况下,此模块不会为CMS内容执行任何特定操作。但是,在默认情况下,CMS页面和CMS块不是通过模板输出的,因此CMS内容中的内联脚本不会被此模块添加nonce(这是一个好事)。虽然默认情况下是安全的,但任何修改(自定义主题、第三方模块等)都可能导致带有nonce的脚本输出受损害的CMS内容。

日志记录

此模块还允许记录这些内联脚本。只需通过 Yireo > Yireo CspWhitelistInlineJs > 设置 > 日志记录csp_whitelist_inline_js/settings/logging)启用日志记录。接下来,监控日志文件var/log/yireo-csp-whitelist-inline-js.log。日志包含此模块捕获的所有块模板的列表。

建议您查看此文件,确保每个模板都由提供该模板的扩展或主题白名单化,这样将来您就能删除此Yireo_CspWhitelistInlineJs模块。

请注意,此文件在每个请求结束时都会重新生成,通过将所有现有行与新行合并。

兼容性

  • Luma主题
  • Hyvä Themes
  • Hyvä Checkout