疑難排解在中建立順序頁面 CSP 受限模式

本文提供在使用建立管理員端訂單時,Adobe Commerce 2.4.7問題的說明和修正 CSP restricted mode已啟用,使用"拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …「瀏覽器主控台記錄檔中的錯誤訊息。

受影響的產品和版本

雲端基礎結構、Adobe Commerce內部部署和Magento Open Source上的Adobe Commerce:

  • 2.4.7
  • 2.4.6畫素
  • 2.4.5畫素
  • 2.4.4畫素

問題 — 管理員 建立訂單 頁面損毀或無法載入

管理員 建立訂單 頁面損毀或無法載入,請使用"拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …「瀏覽器主控台記錄檔中的錯誤訊息。

要再現的步驟

  1. 前往 Sales > Orders.
  2. 建立新訂單。

預期結果

管理員 建立訂單 頁面會正常完全載入。

實際結果

管理員 建立訂單 頁面為空白或缺少元件。 下列專案 JS 錯誤會顯示在瀏覽器主控台記錄檔中: "拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …"

原因

在Adobe Commerce和Magento Open Source 2.4.7版及更新版本中, CSP 設定於 restrict-mode,預設情況下,適用於店面和管理區域以及中的付款頁面 report-only 模式。
對應的 CSP 標題不包含 unsafe-inline 內的關鍵字 script-src 付款頁面的指示。 此外,僅限 whitelisted 允許內嵌指令碼。

解決方案

使用者可能會看到瀏覽器錯誤,因為某些指令碼因以下原因遭到封鎖 CSP:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src

若要修正此問題,您必須

  1. Whitelist 使用封鎖的指令碼 SecureHtmlRenderer 類別。

  2. 使用 CSPNonceProvider 允許執行指令碼的類別。
    Adobe Commerce和Magento Open Source 2.4.7及更新版本包含 Content Security Policy (CSP) nonce 提供者協助產生唯一 nonce 每個請求的字串。 這些 nonce 字串接著會附加至 CSP 標頭。

    使用 generateNonce 中的函式 Magento\Csp\Helper\CspNonceProvider 以取得 nonce 字串。

    code language-php
    use Magento\Csp\Helper\CspNonceProvider;
    
    class MyClass
    {
    
        /**
         * @var CspNonceProvider
         */
        private $cspNonceProvider;
    
        /**
         * @param CspNonceProvider $cspNonceProvider
         */
        public function __construct(CspNonceProvider $cspNonceProvider)
        {
            $this->cspNonceProvider = $cspNonceProvider
        }
    
        /**
         * Get CSP Nonce
         *
         * @return String
         */
        public function getNonce(): string
        {
            return $this->cspNonceProvider->generateNonce();
        }
    }
    
  3. 新增 hash 至模組的 csp_whitelist.xml 檔案。

問題 — 付款方式遺失或無法運作

管理員缺少付款方法或無法正常運作 訂單建立頁面,使用"拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …「瀏覽器主控台記錄檔中的錯誤訊息。

要再現的步驟

  1. 前往 Sales > Orders.
  2. 建立新訂單。
  3. 建立新客戶。
  4. 輸入客戶明細。
  5. 輸入訂單明細(產品、送貨方式)。
  6. 選取付款方式。

預期結果

您可以選取付款方式並繼續成功下訂單。

實際結果

付款方式遺失或無法運作。 下列專案 JS 錯誤會顯示在瀏覽器主控台記錄檔中: "拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …「。

原因

在Adobe Commerce和Magento Open Source 2.4.7版及更新版本中, CSP 設定於 restrict-mode,預設情況下,適用於店面和管理區域以及中的付款頁面 report-only 模式。
對應的 CSP 標題不包含 unsafe-inline 內的關鍵字 script-src 付款頁面的指示。 此外,僅限 whitelisted 允許內嵌指令碼。

解決方案

使用者可能會看到瀏覽器錯誤,因為某些指令碼因以下原因遭到封鎖 CSP

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src

若要修正此問題,您必須

  1. Whitelist 使用封鎖的指令碼 SecureHtmlRenderer 類別。

  2. 使用 CSPNonceProvider 允許執行指令碼的類別。
    Adobe Commerce和Magento Open Source 2.4.7及更新版本包含 Content Security Policy (CSP) nonce 提供者協助產生唯一 nonce 每個請求的字串。 這些 nonce 字串接著會附加至 CSP 標頭。

    使用 generateNonce 中的函式 Magento\Csp\Helper\CspNonceProvider 以取得 nonce 字串。

    code language-php
    use Magento\Csp\Helper\CspNonceProvider;
    
    class MyClass
    {
    
        /**
         * @var CspNonceProvider
         */
        private $cspNonceProvider;
    
        /**
         * @param CspNonceProvider $cspNonceProvider
         */
        public function __construct(CspNonceProvider $cspNonceProvider)
        {
            $this->cspNonceProvider = $cspNonceProvider
        }
    
        /**
         * Get CSP Nonce
         *
         * @return String
         */
        public function getNonce(): string
        {
            return $this->cspNonceProvider->generateNonce();
        }
    }
    
  3. 新增 hash 至模組的 csp_whitelist.xml 檔案。

問題 — 管理員無法下訂單

管理員無法向管理員提交訂單 建立訂單頁面,使用"拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …「瀏覽器主控台記錄檔中的錯誤訊息。

要再現的步驟

  1. 前往 Sales > Orders.
  2. 建立新訂單。
  3. 建立新客戶。
  4. 輸入客戶明細。
  5. 輸入訂單明細(產品、送貨方式)。
  6. 選取付款方式。
  7. 提交訂單。

預期結果

您可以成功提交訂單。

實際結果

您無法提交訂單。 下列專案 JS 錯誤會顯示在瀏覽器主控台記錄檔中: "拒絕執行內嵌指令碼,因為它違反了以下內容安全性原則指令: "script-src …"

原因

在Adobe Commerce和Magento Open Source 2.4.7版及更新版本中, CSP 設定於 restrict-mode,預設情況下,適用於店面和管理區域以及中的付款頁面 report-only 模式。
對應的 CSP 標題不包含 unsafe-inline 內的關鍵字 script-src 付款頁面的指示。 此外,僅限 whitelisted 允許內嵌指令碼。

解決方案

使用者可能會看到瀏覽器錯誤,因為某些指令碼因以下原因遭到封鎖 CSP

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src

若要修正此問題,您必須

  1. Whitelist 使用封鎖的指令碼 SecureHtmlRenderer 類別。

  2. 使用 CSPNonceProvider 允許執行指令碼的類別。
    Adobe Commerce和Magento Open Source 2.4.7及更新版本包含 Content Security Policy (CSP) nonce 提供者協助產生唯一 nonce 每個請求的字串。 這些 nonce 字串接著會附加至 CSP 標頭。

    使用 generateNonce 中的函式 Magento\Csp\Helper\CspNonceProvider 以取得 nonce 字串。

    code language-php
    use Magento\Csp\Helper\CspNonceProvider;
    
    class MyClass
    {
    
        /**
         * @var CspNonceProvider
         */
        private $cspNonceProvider;
    
        /**
         * @param CspNonceProvider $cspNonceProvider
         */
        public function __construct(CspNonceProvider $cspNonceProvider)
        {
            $this->cspNonceProvider = $cspNonceProvider
        }
    
        /**
         * Get CSP Nonce
         *
         * @return String
         */
        public function getNonce(): string
        {
            return $this->cspNonceProvider->generateNonce();
        }
    }
    
  3. 新增 hash 至模組的 csp_whitelist.xml 檔案。

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a