Magento 2.4 Content security policies 内容安全策略

1. Content security policies 内容安全策略

内容安全策略 (CSP) 是一种强大的工具,可用于缓解跨站脚本 (XSS) 和相关攻击,包括卡片浏览器、会话劫持、点击劫持等。 Web 服务器将 CSP 作为响应 HTTP 标头(即 Content-Security-Policy 和 Content-Security-Policy-Report-Only)发送到将脚本、样式和其他资源的来源列入白名单的浏览器。 CSP 和内置浏览器功能一起有助于防止:

  • 从攻击者的网站加载恶意脚本
  • 将信用卡信息发送到攻击者网站的恶意内联脚本
  • 加载恶意样式,使用户点击不应该出现在页面上的元素

2. Application support 应用支持

从 2.3.5 版开始,Adobe Commerce 和 Magento Open Source 支持 CSP 标头并提供配置它们的方法。 (此功能在 Magento_Csp 模块中定义。)该应用程序还提供应用程序级别的默认配置以及需要额外配置的单个核心模块。可以分别为 adminhtml 和店面区域配置策略,以适应不同的用例。该应用程序还允许为特定页面配置唯一的 CSP。

CSP 可以在两种模式下工作:

  1. report-only :仅报告 – 在此模式下,应用程序报告策略违规但不干预。这种模式对于调试很有用。默认情况下,CSP 违规会写入浏览器控制台,但可以将它们配置为以 HTTP 请求的形式向端点报告以收集日志。有许多服务可以为您收集、存储和分类商店的 CSP 违规报告。
  2. restrict mode: 限制模式 – 在此模式下,应用程序对任何违反策略的行为采取行动。

3. Default configuration 默认配置

默认情况下,CSP 配置为仅报告模式,允许商家和开发人员配置策略以根据他们的自定义代码工作。配置策略后,将模式切换为限制。

配置后,应用程序可以强制执行以下策略:

  1. 任何资源,例如 .js、.css、.jpg 或 .ttf 文件,都只能从商店的域中加载
  2. iframe 只能包含商店本身的页面
  3. AJAX 请求只能发送到商店
  4. 表格只能发送到商店
  5. 浏览器只能编译列入白名单的内联脚本和样式

4. Configure a module’s CSP mode 配置模块的 CSP 模式

您可以通过编辑模块的 etc/config.xml 文件在自定义模块中设置 CSP 模式。要将模式设置为限制,请将 default/csp/mode/admin/report_only 和/或 default/csp/mode/storefront/report_only 元素的值更改为 0。要启用仅报告模式,请将值设置为 1 .

示例 config.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <csp>
            <mode>
                <storefront>
                    <report_only>0</report_only>
                </storefront>
                <admin>
                    <report_only>0</report_only>
                </admin>
            </mode>
        </csp>
    </default>
</config>

您可以使用 Magento_Csp 模块中的 etc/config.xml 文件作为参考。创建你的组件文件结构描述了如何创建一个模块。

5. Configure CSPs for your custom code/extension/theme

为您的自定义代码/扩展/主题配置 CSP

Adobe Commerce 和 Magento Open Source 提供了多种方法来将列入白名单的资源添加到您的自定义代码、扩展程序或主题中。确保仅在需要它的模块中添加资源。例如,当您只需要从中加载 .js 文件时,不建议将域添加到 default-src 策略。而是将域添加到 script-src。

下表描述了每种类型的 CSP:

POLICY NAME:保单名称DESCRIPTION:描述
default-src:默认源The default policy :默认策略
base-uri :基础uriDefines which URLs can appear in a page’s <base> element. 定义哪些 URL 可以出现在页面的 <base> 元素中。
child-src:子源Defines the sources for workers and embedded frame contents.
定义工作人员和嵌入框架内容的来源。
connect-src
连接源
Defines the sources that can be loaded using script interfaces.
定义可以使用脚本接口加载的源。
font-src 字体源Defines which sources can serve fonts. 定义哪些源可以提供字体。
form-action 表单动作Defines valid endpoints for submission from <form> tags.
定义从 <form> 标签提交的有效端点。
frame-ancestors框架祖先Defines the sources that can embed the current page.
定义可以嵌入当前页面的来源。
frame-src帧源efines the sources for elements such as <frame> and <iframe>.
定义元素的来源,例如 <frame> 和 <iframe>。
img-srcDefines the sources from which images can be loaded.
定义可以从中加载图像的源。
manifest-srcDefines the allowable contents of web app manifests.
定义 Web 应用清单的允许内容。
media-src媒体源Defines the sources from which images can be loaded.
定义可以从中加载图像的源。
object-src对象源object-src对象源
script-src脚本源Defines the sources for JavaScript <script> elements.
定义 JavaScript <script> 元素的来源。
style-src样式-srcDefines the sources for stylesheets.
定义样式表的来源。

5.1 Add a domain to the whitelist 将域添加到白名单

您可以通过将 csp_whitelist.xml 添加到自定义模块的 etc 文件夹中,将域添加到策略的白名单(如 script-src、style-src、font-src 等)。

<?xml version="1.0"?>
<csp_whitelist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Csp:etc/csp_whitelist.xsd">
    <policies>
        <policy id="script-src">
            <values>
                <value id="devdocs-base" type="host">https://developer.adobe.com</value>
                <value id="magento" type="host">https://magento.com</value>
            </values>
        </policy>
        <policy id="connect-src">
            <values>
                <value id="devdocs" type="host">https://developer.adobe.com</value>
            </values>
        </policy>
    </policies>
</csp_whitelist>
csp_whitelist

5.2 Whitelist an inline script or style 将内联脚本或样式列入白名单

对于 style-src 和 script-src(Adobe Commerce 和 Magento Open Source 2.4 的默认设置)内联脚本和样式禁用了 unsafe-inline 的商店必须列入白名单。

5.3 Advanced CSP configuration 高级 CSP 配置

本文参考: https://developer.adobe.com/commerce/php/development/security/content-security-policies/

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注