Solução de problemas de criação de página de pedido no CSP modo restrito

Este artigo fornece explicações e correções para problemas do Adobe Commerce 2.4.7 ao criar um pedido no lado do administrador com CSP restricted mode é Ativado, com o "Recusou-se a executar o script integrado porque ele viola a seguinte diretiva de política de segurança de conteúdo: "script-src …"mensagem de erro no log do 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 - Administrador criar pedido a página está quebrada ou não consegue carregar

O administrador criar pedido A página está quebrada ou não consegue carregar, com o "Recusou-se a executar o script integrado porque ele viola a seguinte diretiva de política de segurança de conteúdo: "script-src …"mensagem de erro no log do console do navegador.

Etapas a serem reproduzidas:

  1. Ir para Sales > Orders.
  2. Criar um novo pedido.

Resultados esperados:

O administrador criar pedido A página é carregada normalmente.

Resultados reais:

O administrador criar pedido A página está em branco ou tem componentes ausentes. As seguintes JS o erro é exibido no log do console do navegador: "Recusou-se a executar o script integrado 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, CSP está configurado em restrict-mode, por padrão, para páginas de pagamento nas áreas de vitrine e administração e no report-only para todas as outras páginas.
Os correspondentes CSP o cabeçalho não contém a variável unsafe-inline palavra-chave dentro do script-src diretiva 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 devido a 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 o SecureHtmlRenderer classe.

  2. Use o CSPNonceProvider para permitir que scripts sejam executados.
    O Adobe Commerce e o Magento Open Source 2.4.7 e versões posteriores incluem uma Content Security Policy (CSP) nonce para facilitar a geração de dados únicos nonce strings para cada solicitação. Esses nonce as cadeias de caracteres são anexadas ao CSP cabeçalho.

    Use o generateNonce função em Magento\Csp\Helper\CspNonceProvider para obter uma nonce string.

    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. Adicionar um hash ao do seu módulo csp_whitelist.xml arquivo.

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 no Administrador página de criação do pedido, com o "Recusou-se a executar o script integrado porque ele viola a seguinte diretiva de política de segurança de conteúdo: "script-src …"mensagem de erro no log do console do navegador.

Etapas a serem reproduzidas:

  1. Ir 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. As seguintes JS o erro é exibido no log do console do navegador: "Recusou-se a executar o script integrado 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, CSP está configurado em restrict-mode, por padrão, para páginas de pagamento nas áreas de vitrine e administração e no report-only para todas as outras páginas.
Os correspondentes CSP o cabeçalho não contém a variável unsafe-inline palavra-chave dentro do script-src diretiva 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 devido a 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 o SecureHtmlRenderer classe.

  2. Use o CSPNonceProvider para permitir que scripts sejam executados.
    O Adobe Commerce e o Magento Open Source 2.4.7 e versões posteriores incluem uma Content Security Policy (CSP) nonce para facilitar a geração de dados únicos nonce strings para cada solicitação. Esses nonce as cadeias de caracteres são anexadas ao CSP cabeçalho.

    Use o generateNonce função em Magento\Csp\Helper\CspNonceProvider para obter uma nonce string.

    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. adicionar um hash ao do seu módulo csp_whitelist.xml arquivo.

Problema - O administrador não pode fazer um pedido

Um administrador não pode enviar um pedido para o Administrador criar página de pedido, com o "Recusou-se a executar o script integrado porque ele viola a seguinte diretiva de política de segurança de conteúdo: "script-src …"mensagem de erro no log do console do navegador.

Etapas a serem reproduzidas:

  1. Ir 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. As seguintes JS o erro é exibido no log do console do navegador: "Recusou-se a executar o script integrado 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, CSP está configurado em restrict-mode, por padrão, para páginas de pagamento nas áreas de vitrine e administração e no report-only para todas as outras páginas.
Os correspondentes CSP o cabeçalho não contém a variável unsafe-inline palavra-chave dentro do script-src diretiva 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 devido a 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 o SecureHtmlRenderer classe.

  2. Use o CSPNonceProvider para permitir que scripts sejam executados.
    O Adobe Commerce e o Magento Open Source 2.4.7 e versões posteriores incluem uma Content Security Policy (CSP) nonce para facilitar a geração de dados únicos nonce strings para cada solicitação. Esses nonce as cadeias de caracteres são anexadas ao CSP cabeçalho.

    Use o generateNonce função em Magento\Csp\Helper\CspNonceProvider para obter uma nonce string.

    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. Adicionar um hash ao do seu módulo csp_whitelist.xml arquivo.

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