Risolvere i problemi relativi alla pagina di estrazione della vetrina in modalità con restrizioni CSP

Questo articolo fornisce spiegazioni e correzioni per i problemi di Adobe Commerce 2.4.7 durante la visualizzazione della pagina di estrazione in CSP restricted mode, con il messaggio di errore "Rifiutato di eseguire lo script in linea perché viola la seguente direttiva Content Security Policy: "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 Storefront Checkout è danneggiata o non è in grado di essere caricata

La pagina storefront checkout è interrotta o non è in grado di essere caricata con "Rifiutata l'esecuzione dello 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 alla vetrina.
  2. Aggiungi un prodotto al carrello e procedi al pagamento.

Risultati previsti:

La pagina di pagamento viene caricata completamente normalmente.

Risultati effettivi:

La pagina di pagamento è vuota o non contiene componenti. 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 storefront checkout 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 alla vetrina.
  2. Aggiungi un prodotto al carrello e procedi al pagamento.
  3. 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 - Il cliente non può effettuare un ordine

Un cliente non è in grado di effettuare un ordine con "Rifiutato di eseguire lo script in linea perché viola la seguente direttiva del criterio sulla sicurezza dei contenuti: messaggio di errore "script-src …" nel registro della console del browser.

Passaggi da riprodurre:

  1. Vai alla vetrina.
  2. Aggiungi un prodotto al carrello e procedi al pagamento.
  3. Seleziona un metodo di pagamento.
  4. Fai clic su Inserisci ordine.

Risultati previsti:

Puoi effettuare un ordine con successo.

Risultati effettivi:

Non sei in grado di fare 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