Felsök skapandesidan i CSP begränsat läge

I den här artikeln ges förklaringar och korrigeringar för Adobe Commerce 2.4.7-problem när en order skapas på admin-sidan med CSP restricted mode är Enabled med "Refused to execute inline script, because it violates the following Content Security Policy Directive: "script-src …" error message in the browser console log…".

Berörda produkter och versioner

Adobe Commerce i molninfrastruktur, Adobe Commerce lokalt och Magento Open Source:

  • 2.4.7
  • 2.4.6-pX
  • 2.4.5-pX
  • 2.4.4-pX

Problem - Admin skapad beställning är skadad eller kan inte läsas in

Sidan Admin create order är skadad eller kan inte läsas in, med felmeddelandet Nekas att köra infogat skript eftersom den bryter mot följande direktiv för innehållssäkerhetsprincip: "script-src …" i webbläsarkonsolloggen.

Steg som ska återskapas:

  1. Gå till Sales > Orders.
  2. Skapa en ny order.

Förväntade resultat:

Sidan Admin Skapa order läses in helt och hållet som vanligt.

Faktiska resultat:

Sidan Admin create order är tom eller så saknas komponenter. Följande JS-fel visas i webbläsarens konsollogg: Avvisad att det infogade skriptet inte kan köras eftersom det bryter mot följande direktiv för säkerhetsprincip för innehåll: "script-src …"

Orsak

I Adobe Commerce och Magento Open Source, version 2.4.7 och senare, är CSP som standard konfigurerat i restrict-mode för betalningssidor i butiks- och administratörsområdet och i report-only-läge för alla andra sidor.
Motsvarande CSP-rubrik innehåller inte nyckelordet unsafe-inline i direktivet script-src för betalningssidor. Dessutom tillåts bara whitelisted textbundna skript.

Lösning

Användare kan se webbläsarfel på grund av att vissa skript blockeras på grund av CSP:

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

Du måste antingen för att kunna åtgärda problemet:

  1. Whitelist blockerade skript med klassen SecureHtmlRenderer.

  2. Använd klassen CSPNonceProvider om du vill tillåta att skript körs.
    Adobe Commerce och Magento Open Source 2.4.7 och senare innehåller en Content Security Policy (CSP) nonce-provider som gör det enklare att skapa unika nonce -strängar för varje begäran. Dessa nonce strängar kopplas sedan till rubriken CSP.

    Använd funktionen generateNonce i Magento\Csp\Helper\CspNonceProvider för att hämta en nonce-sträng.

    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. Lägg till en hash i modulens csp_whitelist.xml-fil.

Problem - Betalningsmetoden saknas eller fungerar inte

Betalningsmetoden saknas eller fungerar inte på Admin order create page, med felmeddelandet Nekad att köra infogat skript eftersom det bryter mot följande direktiv för innehållets säkerhetsprincip: "script-src …" i webbläsarkonsolloggen.

Steg som ska återskapas:

  1. Gå till Sales > Orders.
  2. Skapa en ny order.
  3. Skapa en ny kund.
  4. Ange kundinformationen.
  5. Ange orderdetaljer (produkter, leveranssätt).
  6. Välj en betalningsmetod.

Förväntade resultat:

Du kan välja en betalningsmetod och fortsätta att göra en beställning.

Faktiska resultat:

Betalningsmetoden saknas eller fungerar inte. Följande JS-fel visas i webbläsarens konsollogg: Avvisad att det infogade skriptet inte kan köras eftersom det bryter mot följande direktiv för säkerhetsprincip för innehåll: "script-src …".

Orsak

I Adobe Commerce och Magento Open Source, version 2.4.7 och senare, är CSP som standard konfigurerat i restrict-mode för betalningssidor i butiks- och administratörsområdet och i report-only-läge för alla andra sidor.
Motsvarande CSP-rubrik innehåller inte nyckelordet unsafe-inline i direktivet script-src för betalningssidor. Dessutom tillåts bara whitelisted textbundna skript.

Lösning

Användare kan se webbläsarfel på grund av att vissa skript blockeras på grund av CSP:

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

Du måste antingen för att kunna åtgärda problemet:

  1. Whitelist blockerade skript med klassen SecureHtmlRenderer.

  2. Använd klassen CSPNonceProvider om du vill tillåta att skript körs.
    Adobe Commerce och Magento Open Source 2.4.7 och senare innehåller en Content Security Policy (CSP) nonce-provider som gör det enklare att skapa unika nonce -strängar för varje begäran. Dessa nonce strängar kopplas sedan till rubriken CSP.

    Använd funktionen generateNonce i Magento\Csp\Helper\CspNonceProvider för att hämta en nonce-sträng.

    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. lägg till en hash i modulens csp_whitelist.xml-fil.

Problem - Administratören kan inte göra en beställning

En administratör kan inte skicka en beställning på Admin create order page med "Refused to execute inline script eftersom den bryter mot följande direktiv för Content Security Policy: "script-src …" error message in the browser console log.

Steg som ska återskapas:

  1. Gå till Sales > Orders.
  2. Skapa en ny order.
  3. Skapa en ny kund.
  4. Ange kundinformationen.
  5. Ange orderdetaljer (produkter, leveranssätt).
  6. Välj en betalningsmetod.
  7. Skicka ordern.

Förväntade resultat:

Du kan skicka en beställning.

Faktiska resultat:

Du kan inte skicka in en beställning. Följande JS-fel visas i webbläsarens konsollogg: Avvisad att det infogade skriptet inte kan köras eftersom det bryter mot följande direktiv för säkerhetsprincip för innehåll: "script-src …"

Orsak

I Adobe Commerce och Magento Open Source, version 2.4.7 och senare, är CSP som standard konfigurerat i restrict-mode för betalningssidor i butiks- och administratörsområdet och i report-only-läge för alla andra sidor.
Motsvarande CSP-rubrik innehåller inte nyckelordet unsafe-inline i direktivet script-src för betalningssidor. Dessutom tillåts bara whitelisted textbundna skript.

Lösning

Användare kan se webbläsarfel på grund av att vissa skript blockeras på grund av CSP:

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

Du måste antingen för att kunna åtgärda problemet:

  1. Whitelist blockerade skript med klassen SecureHtmlRenderer.

  2. Använd klassen CSPNonceProvider om du vill tillåta att skript körs.
    Adobe Commerce och Magento Open Source 2.4.7 och senare innehåller en Content Security Policy (CSP) nonce-provider som gör det enklare att skapa unika nonce -strängar för varje begäran. Dessa nonce strängar kopplas sedan till rubriken CSP.

    Använd funktionen generateNonce i Magento\Csp\Helper\CspNonceProvider för att hämta en nonce-sträng.

    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. Lägg till en hash i modulens csp_whitelist.xml-fil.

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