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:
- Vai alla vetrina.
- 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:
-
Whitelist gli script bloccati utilizzando la classe
SecureHtmlRenderer
. -
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
inMagento\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(); } }
-
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:
- Vai alla vetrina.
- Aggiungi un prodotto al carrello e procedi al pagamento.
- 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:
-
Whitelist gli script bloccati utilizzando la classe
SecureHtmlRenderer
. -
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
inMagento\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(); } }
-
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:
- Vai alla vetrina.
- Aggiungi un prodotto al carrello e procedi al pagamento.
- Seleziona un metodo di pagamento.
- 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:
-
Whitelist gli script bloccati utilizzando la classe
SecureHtmlRenderer
. -
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
inMagento\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(); } }
-
Aggiungi a hash al file
csp_whitelist.xml
del modulo.