Risolvere i problemi relativi alla creazione della pagina dell'ordine in modalità con restrizioni CSP

Questo articolo fornisce spiegazioni e correzioni per i problemi di Adobe Commerce 2.4.7 durante la creazione di un ordine sul lato Amministratore con CSP restricted mode abilitato 2}, con il messaggio di errore " Rifiutato di eseguire lo script in linea perché viola la seguente direttiva dei criteri sulla sicurezza dei contenuti: "script-src …" nel registro della console del browser.

Prodotti e versioni interessati

Adobe Commerce su infrastruttura cloud, Adobe Commerce on-premise e Magento Open Source:

  • 2.4.7.
  • 2,4,6-pX
  • 2,4,5-pX
  • 2,4,4-pX

Problema - La pagina Crea ordine dell'amministratore è interrotta o non è in grado di essere caricata

La pagina Admin create order è interrotta o non è in grado di caricare. "Impossibile eseguire lo script in linea perché viola la seguente direttiva dei criteri sulla sicurezza dei contenuti: messaggio di errore "script-src …" nel registro della console del browser.

Passaggi da riprodurre:

  1. Vai a Sales > Orders.
  2. Crea un nuovo ordine.

Risultati previsti:

La pagina Admin create order viene caricata completamente normalmente.

Risultati effettivi:

La pagina Amministrazione crea ordine contiene componenti vuoti o mancanti. Nel registro della console del browser viene visualizzato il seguente errore JS: "Rifiutata l'esecuzione dello script in linea perché viola la seguente direttiva del criterio sulla sicurezza dei contenuti: "script-src …"

Causa

In Adobe Commerce e Magento Open Source versione 2.4.7 e successive, CSP è configurato in restrict-mode per impostazione predefinita per le pagine di pagamento nelle aree storefront e admin e in modalità report-only per tutte le altre pagine.
L'intestazione CSP corrispondente non contiene la parola chiave unsafe-inline all'interno della direttiva script-src per le pagine di pagamento. Inoltre, sono consentiti solo whitelisted script in linea.

Soluzione

Gli utenti potrebbero visualizzare errori del browser a causa di alcuni script bloccati a causa di CSP:

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

Per risolvere il problema, è necessario:

  1. Whitelist gli script bloccati utilizzando la classe SecureHtmlRenderer.

  2. Utilizzare la classe CSPNonceProvider per consentire l'esecuzione degli script.
    Adobe Commerce e Magento Open Source 2.4.7 e versioni successive includono un provider Content Security Policy (CSP) nonce per facilitare la generazione di stringhe nonce univoche per ogni richiesta. Queste stringhe nonce sono quindi collegate all'intestazione CSP.

    Utilizzare la funzione generateNonce in Magento\Csp\Helper\CspNonceProvider per ottenere una stringa 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. Aggiungi a hash al file csp_whitelist.xml del modulo.

Problema - Il metodo di pagamento è mancante o non funziona

Metodo di pagamento mancante o non funzionante nella pagina di creazione dell'ordine amministratore, con il messaggio di errore "Rifiutato di eseguire lo script in linea perché viola la seguente direttiva dei criteri di sicurezza del contenuto: "script-src …" nel registro della console del browser.

Passaggi da riprodurre:

  1. Vai a Sales > Orders.
  2. Crea un nuovo ordine.
  3. Crea un nuovo cliente.
  4. Inserire i dettagli del cliente.
  5. Inserire i dettagli dell'ordine (prodotti, metodo di spedizione).
  6. Seleziona un metodo di pagamento.

Risultati previsti:

Puoi selezionare un metodo di pagamento e procedere con l’ordine.

Risultati effettivi:

Metodo di pagamento mancante o non funzionante. Nel registro della console del browser viene visualizzato il seguente errore JS: "Rifiutata l'esecuzione dello script in linea perché viola la seguente direttiva del criterio sulla sicurezza dei contenuti: "script-src …".

Causa

In Adobe Commerce e Magento Open Source versione 2.4.7 e successive, CSP è configurato in restrict-mode per impostazione predefinita per le pagine di pagamento nelle aree storefront e admin e in modalità report-only per tutte le altre pagine.
L'intestazione CSP corrispondente non contiene la parola chiave unsafe-inline all'interno della direttiva script-src per le pagine di pagamento. Inoltre, sono consentiti solo whitelisted script in linea.

Soluzione

Gli utenti potrebbero visualizzare errori del browser a causa di alcuni script bloccati a causa di CSP:

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

Per risolvere il problema, è necessario:

  1. Whitelist gli script bloccati utilizzando la classe SecureHtmlRenderer.

  2. Utilizzare la classe CSPNonceProvider per consentire l'esecuzione degli script.
    Adobe Commerce e Magento Open Source 2.4.7 e versioni successive includono un provider Content Security Policy (CSP) nonce per facilitare la generazione di stringhe nonce univoche per ogni richiesta. Queste stringhe nonce sono quindi collegate all'intestazione CSP.

    Utilizzare la funzione generateNonce in Magento\Csp\Helper\CspNonceProvider per ottenere una stringa 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. aggiungi a hash al file csp_whitelist.xml del modulo.

Problema - L’amministratore non può effettuare un ordine

Un amministratore non può inviare un ordine nella pagina Crea ordine dell'amministratore, con il messaggio di errore "Rifiutato di eseguire lo script in linea perché viola la seguente direttiva dei criteri di sicurezza del contenuto: "script-src …" nel registro della console del browser.

Passaggi da riprodurre:

  1. Vai a Sales > Orders.
  2. Crea un nuovo ordine.
  3. Crea un nuovo cliente.
  4. Inserire i dettagli del cliente.
  5. Inserire i dettagli dell'ordine (prodotti, metodo di spedizione).
  6. Seleziona un metodo di pagamento.
  7. Invia l’ordine.

Risultati previsti:

Sei in grado di inviare un ordine correttamente.

Risultati effettivi:

Non puoi inviare un ordine. Nel registro della console del browser viene visualizzato il seguente errore JS: "Rifiutata l'esecuzione dello script in linea perché viola la seguente direttiva del criterio sulla sicurezza dei contenuti: "script-src …"

Causa

In Adobe Commerce e Magento Open Source versione 2.4.7 e successive, CSP è configurato in restrict-mode per impostazione predefinita per le pagine di pagamento nelle aree storefront e admin e in modalità report-only per tutte le altre pagine.
L'intestazione CSP corrispondente non contiene la parola chiave unsafe-inline all'interno della direttiva script-src per le pagine di pagamento. Inoltre, sono consentiti solo whitelisted script in linea.

Soluzione

Gli utenti potrebbero visualizzare errori del browser a causa di alcuni script bloccati a causa di CSP:

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

Per risolvere il problema, è necessario:

  1. Whitelist gli script bloccati utilizzando la classe SecureHtmlRenderer.

  2. Utilizzare la classe CSPNonceProvider per consentire l'esecuzione degli script.
    Adobe Commerce e Magento Open Source 2.4.7 e versioni successive includono un provider Content Security Policy (CSP) nonce per facilitare la generazione di stringhe nonce univoche per ogni richiesta. Queste stringhe nonce sono quindi collegate all'intestazione CSP.

    Utilizzare la funzione generateNonce in Magento\Csp\Helper\CspNonceProvider per ottenere una stringa 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. Aggiungi a hash al file csp_whitelist.xml del modulo.

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