Solucionar problemas da página de criação de pedido no modo restrito CSP
Este artigo fornece explicações e correções para os problemas do Adobe Commerce 2.4.7 ao criar uma ordem no lado do Administrador com CSP restricted mode is Enabled, com o script "Recusado a executar o script integrado porque viola a seguinte diretiva de Política de Segurança de Conteúdo: mensagem de erro "script-src …" no log de console do navegador.
Produtos e versões afetados
Adobe Commerce na infraestrutura em nuvem, Adobe Commerce no local e Magento Open Source:
- 2.4.7
- 2,4,6-pX
- 2,4,5-pX
- 2,4,4-pX
Problema - A página criar pedido do administrador está corrompida ou não pode ser carregada
A página de ordem de criação do administrador está corrompida ou não pode ser carregada, com o script embutido "Recusado a executar porque viola a seguinte diretiva de Política de Segurança de Conteúdo: mensagem de erro "script-src …" no log de console do navegador.
Etapas a serem reproduzidas:
- Vá para Sales > Orders.
- Criar um novo pedido.
Resultados esperados:
A página criar ordem do administrador é carregada normalmente.
Resultados reais:
A página Admin criar ordem está em branco ou sem componentes. O seguinte erro JS é exibido no log do console do navegador: "Recusou-se a executar o script embutido porque ele viola a seguinte diretiva de Política de Segurança de Conteúdo: "script-src …"
Causa
No Adobe Commerce e Magento Open Source versões 2.4.7 e posteriores, o CSP é configurado em restrict-mode
, por padrão, para páginas de pagamento nas áreas de vitrine e administração, e no modo report-only
para todas as outras páginas.
O cabeçalho CSP correspondente não contém a palavra-chave unsafe-inline
dentro da diretiva script-src
para páginas de pagamento. Além disso, somente whitelisted scripts integrados são permitidos.
Solução
Os usuários podem ver erros de navegador devido ao bloqueio de determinados scripts por causa de CSP:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src
Para corrigir esse problema, você deve:
-
Whitelist os scripts bloqueados usando a classe
SecureHtmlRenderer
. -
Use a classe
CSPNonceProvider
para permitir que scripts sejam executados.
Adobe Commerce e Magento Open Source 2.4.7 e posterior incluem um provedor Content Security Policy (CSP) nonce para facilitar a geração de cadeias de caracteres nonce exclusivas para cada solicitação. Essas cadeias de caracteres nonce são anexadas ao cabeçalho CSP.Use a função
generateNonce
emMagento\Csp\Helper\CspNonceProvider
para obter uma cadeia de caracteres 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(); } }
-
Adicione um hash ao arquivo
csp_whitelist.xml
do módulo.
Problema - O método de pagamento está ausente ou não está funcionando
O método de pagamento está ausente ou não está funcionando na página de criação de pedido do Administrador, com o script embutido "Recusado para executar porque ele viola a seguinte diretiva de Política de Segurança de Conteúdo: mensagem de erro "script-src …" no log de console do navegador.
Etapas a serem reproduzidas:
- Vá para Sales > Orders.
- Criar um novo pedido.
- Crie um novo cliente.
- Informe os detalhes do cliente.
- Informe os detalhes do pedido (produtos, método de entrega).
- Selecione um método de pagamento.
Resultados esperados:
Você pode selecionar um método de pagamento e prosseguir para colocar um pedido com sucesso.
Resultados reais:
O método de pagamento está ausente ou não está funcionando. O seguinte erro JS é exibido no log do console do navegador: "Recusou-se a executar o script embutido porque ele viola a seguinte diretiva de Política de Segurança de Conteúdo: "script-src …".
Causa
No Adobe Commerce e Magento Open Source versões 2.4.7 e posteriores, o CSP é configurado em restrict-mode
, por padrão, para páginas de pagamento nas áreas de vitrine e administração, e no modo report-only
para todas as outras páginas.
O cabeçalho CSP correspondente não contém a palavra-chave unsafe-inline
dentro da diretiva script-src
para páginas de pagamento. Além disso, somente whitelisted scripts integrados são permitidos.
Solução
Os usuários podem ver erros de navegador devido ao bloqueio de determinados scripts por causa de CSP:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src
Para corrigir esse problema, você deve:
-
Whitelist os scripts bloqueados usando a classe
SecureHtmlRenderer
. -
Use a classe
CSPNonceProvider
para permitir que scripts sejam executados.
Adobe Commerce e Magento Open Source 2.4.7 e posterior incluem um provedor Content Security Policy (CSP) nonce para facilitar a geração de cadeias de caracteres nonce exclusivas para cada solicitação. Essas cadeias de caracteres nonce são anexadas ao cabeçalho CSP.Use a função
generateNonce
emMagento\Csp\Helper\CspNonceProvider
para obter uma cadeia de caracteres 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(); } }
-
adicione um hash ao arquivo
csp_whitelist.xml
do módulo.
Problema - O administrador não pode fazer um pedido
Um administrador não pode enviar um pedido na página Criar pedido do Administrador, com o script embutido "Recusado a executar, pois ele viola a seguinte diretiva de Política de Segurança de Conteúdo: mensagem de erro "script-src …" no log de console do navegador.
Etapas a serem reproduzidas:
- Vá para Sales > Orders.
- Criar um novo pedido.
- Crie um novo cliente.
- Informe os detalhes do cliente.
- Informe os detalhes do pedido (produtos, método de entrega).
- Selecione um método de pagamento.
- Enviar o pedido.
Resultados esperados:
Você pode enviar um pedido com sucesso.
Resultados reais:
Você não pode enviar um pedido. O seguinte erro JS é exibido no log do console do navegador: "Recusou-se a executar o script embutido porque ele viola a seguinte diretiva de Política de Segurança de Conteúdo: "script-src …"
Causa
No Adobe Commerce e Magento Open Source versões 2.4.7 e posteriores, o CSP é configurado em restrict-mode
, por padrão, para páginas de pagamento nas áreas de vitrine e administração, e no modo report-only
para todas as outras páginas.
O cabeçalho CSP correspondente não contém a palavra-chave unsafe-inline
dentro da diretiva script-src
para páginas de pagamento. Além disso, somente whitelisted scripts integrados são permitidos.
Solução
Os usuários podem ver erros de navegador devido ao bloqueio de determinados scripts por causa de CSP:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src
Para corrigir esse problema, você deve:
-
Whitelist os scripts bloqueados usando a classe
SecureHtmlRenderer
. -
Use a classe
CSPNonceProvider
para permitir que scripts sejam executados.
Adobe Commerce e Magento Open Source 2.4.7 e posterior incluem um provedor Content Security Policy (CSP) nonce para facilitar a geração de cadeias de caracteres nonce exclusivas para cada solicitação. Essas cadeias de caracteres nonce são anexadas ao cabeçalho CSP.Use a função
generateNonce
emMagento\Csp\Helper\CspNonceProvider
para obter uma cadeia de caracteres 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(); } }
-
Adicione um hash ao arquivo
csp_whitelist.xml
do módulo.