Solucionar problemas de la página Crear pedido en modo restringido CSP

Este artículo proporciona explicaciones y correcciones para los problemas de Adobe Commerce 2.4.7 mientras se crea un pedido en el lado del administrador con CSP restricted mode está Habilitado, con el "Se rechazó ejecutar script en línea porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …" mensaje de error en el registro de la consola del explorador.

Productos y versiones afectados

Adobe Commerce en la infraestructura en la nube, Adobe Commerce local y Magento Open Source:

  • 2.4.7
  • 2.4.6-pX
  • 2,4,5-pX
  • 2.4.4-pX

Problema - La página del administrador crear pedido está dañada o no se puede cargar

La página de administración create order está dañada o no se puede cargar, con el script en línea "No se pudo ejecutar porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …" mensaje de error en el registro de la consola del explorador.

Pasos a seguir:

  1. Ir a Sales > Orders.
  2. Cree un nuevo pedido.

Resultados esperados:

La página Administrador crear pedido se carga completamente normalmente.

Resultados reales:

La página Administrador crear pedido está en blanco o faltan componentes. El siguiente error JS se muestra en el registro de la consola del explorador: "Se rechazó ejecutar script en línea porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …"

Causa

En la versión 2.4.7 y posteriores de Adobe Commerce y Magento Open Source, CSP está configurado en restrict-mode, de forma predeterminada, para las páginas de pago en las áreas de tienda y administración, y en el modo report-only para todas las demás páginas.
El encabezado CSP correspondiente no contiene la palabra clave unsafe-inline dentro de la directiva script-src para páginas de pago. Además, solo se permiten whitelisted scripts en línea.

Solución

Los usuarios pueden ver errores en el explorador debido a que se han bloqueado ciertos scripts debido a CSP:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src

Para solucionar este problema, debe:

  1. Whitelist los scripts bloqueados mediante la clase SecureHtmlRenderer.

  2. Utilice la clase CSPNonceProvider para permitir la ejecución de scripts.
    Adobe Commerce y Magento Open Source 2.4.7 y versiones posteriores incluyen un proveedor Content Security Policy (CSP) nonce para facilitar la generación de cadenas nonce únicas para cada solicitud. Estas cadenas de nonce se adjuntan al encabezado CSP.

    Utilice la función generateNonce en Magento\Csp\Helper\CspNonceProvider para obtener una cadena 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. Agregue hash al archivo csp_whitelist.xml de su módulo.

Problema: falta el método de pago o no funciona

Falta el método de pago o no funciona en la página de creación de pedidos del administrador, con el script en línea "Rechazado porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …" mensaje de error en el registro de la consola del explorador.

Pasos a seguir:

  1. Ir a Sales > Orders.
  2. Cree un nuevo pedido.
  3. Crear un cliente nuevo.
  4. Introduzca los detalles del cliente.
  5. Introduzca los detalles del pedido (productos, método de envío).
  6. Seleccione una forma de pago.

Resultados esperados:

Puede seleccionar una forma de pago y proceder a realizar un pedido correctamente.

Resultados reales:

El método de pago falta o no funciona. El siguiente error JS se muestra en el registro de la consola del explorador: "Se rechazó ejecutar script en línea porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …".

Causa

En la versión 2.4.7 y posteriores de Adobe Commerce y Magento Open Source, CSP está configurado en restrict-mode, de forma predeterminada, para las páginas de pago en las áreas de tienda y administración, y en el modo report-only para todas las demás páginas.
El encabezado CSP correspondiente no contiene la palabra clave unsafe-inline dentro de la directiva script-src para páginas de pago. Además, solo se permiten whitelisted scripts en línea.

Solución

Los usuarios pueden ver errores en el explorador debido a que se han bloqueado ciertos scripts debido a CSP:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src

Para solucionar este problema, debe:

  1. Whitelist los scripts bloqueados mediante la clase SecureHtmlRenderer.

  2. Utilice la clase CSPNonceProvider para permitir la ejecución de scripts.
    Adobe Commerce y Magento Open Source 2.4.7 y versiones posteriores incluyen un proveedor Content Security Policy (CSP) nonce para facilitar la generación de cadenas nonce únicas para cada solicitud. Estas cadenas de nonce se adjuntan al encabezado CSP.

    Utilice la función generateNonce en Magento\Csp\Helper\CspNonceProvider para obtener una cadena 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. agrega hash al archivo csp_whitelist.xml de tu módulo.

Problema: el administrador no puede realizar un pedido

Un administrador no puede enviar una solicitud en la página de administración crear pedido, con el script en línea "Se rechazó ejecutar porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …" mensaje de error en el registro de la consola del explorador.

Pasos a seguir:

  1. Ir a Sales > Orders.
  2. Cree un nuevo pedido.
  3. Crear un cliente nuevo.
  4. Introduzca los detalles del cliente.
  5. Introduzca los detalles del pedido (productos, método de envío).
  6. Seleccione una forma de pago.
  7. Envíe el pedido.

Resultados esperados:

Puede enviar una solicitud correctamente.

Resultados reales:

No es posible enviar una solicitud. El siguiente error JS se muestra en el registro de la consola del explorador: "Se rechazó ejecutar script en línea porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …"

Causa

En la versión 2.4.7 y posteriores de Adobe Commerce y Magento Open Source, CSP está configurado en restrict-mode, de forma predeterminada, para las páginas de pago en las áreas de tienda y administración, y en el modo report-only para todas las demás páginas.
El encabezado CSP correspondiente no contiene la palabra clave unsafe-inline dentro de la directiva script-src para páginas de pago. Además, solo se permiten whitelisted scripts en línea.

Solución

Los usuarios pueden ver errores en el explorador debido a que se han bloqueado ciertos scripts debido a CSP:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src

Para solucionar este problema, debe:

  1. Whitelist los scripts bloqueados mediante la clase SecureHtmlRenderer.

  2. Utilice la clase CSPNonceProvider para permitir la ejecución de scripts.
    Adobe Commerce y Magento Open Source 2.4.7 y versiones posteriores incluyen un proveedor Content Security Policy (CSP) nonce para facilitar la generación de cadenas nonce únicas para cada solicitud. Estas cadenas de nonce se adjuntan al encabezado CSP.

    Utilice la función generateNonce en Magento\Csp\Helper\CspNonceProvider para obtener una cadena 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. Agregue hash al archivo csp_whitelist.xml de su módulo.

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