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:

  1. Vá para Sales > Orders.
  2. 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:

  1. Whitelist os scripts bloqueados usando a classe SecureHtmlRenderer.

  2. 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 em Magento\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();
        }
    }
    
  3. 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:

  1. Vá para Sales > Orders.
  2. Criar um novo pedido.
  3. Crie um novo cliente.
  4. Informe os detalhes do cliente.
  5. Informe os detalhes do pedido (produtos, método de entrega).
  6. 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:

  1. Whitelist os scripts bloqueados usando a classe SecureHtmlRenderer.

  2. 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 em Magento\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();
        }
    }
    
  3. 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:

  1. Vá para Sales > Orders.
  2. Criar um novo pedido.
  3. Crie um novo cliente.
  4. Informe os detalhes do cliente.
  5. Informe os detalhes do pedido (produtos, método de entrega).
  6. Selecione um método de pagamento.
  7. 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:

  1. Whitelist os scripts bloqueados usando a classe SecureHtmlRenderer.

  2. 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 em Magento\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();
        }
    }
    
  3. Adicione um hash ao arquivo csp_whitelist.xml do módulo.

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