yireo / magento2-csp-whitelist-inline-js
用于自动将内联JS脚本添加到CSP白名单的Magento模块
Requires
- magento/framework: ^102.0 || ^103.0
- yireo/magento2-csp-utilities: ^1.0
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