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:
- Vai a Sales > Orders.
- 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:
-
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 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:
- Vai a Sales > Orders.
- Crea un nuovo ordine.
- Crea un nuovo cliente.
- Inserire i dettagli del cliente.
- Inserire i dettagli dell'ordine (prodotti, metodo di spedizione).
- 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 - 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:
- Vai a Sales > Orders.
- Crea un nuovo ordine.
- Crea un nuovo cliente.
- Inserire i dettagli del cliente.
- Inserire i dettagli dell'ordine (prodotti, metodo di spedizione).
- Seleziona un metodo di pagamento.
- 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:
-
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.