Solucionar problemas de la página de cierre de tienda en modo restringido CSP

Este artículo proporciona explicaciones y correcciones para los problemas de Adobe Commerce 2.4.7 mientras ve la página de cierre de compra en CSP restricted mode, con el mensaje de error "Se negó a ejecutar script en línea porque infringe la siguiente directiva de directiva de seguridad de contenido: "script-src …" 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 de cierre de compra de la tienda está dañada o no se puede cargar

La página storefront checkout está dañada o no se puede cargar, con el script en línea "Rechazado porque viola 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. Ve a la tienda.
  2. Añada un producto al carro de compras y continúe con el cierre de compra.

Resultados esperados:

La página de cierre de compra se carga completamente normalmente.

Resultados reales:

La página de cierre de compra 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 cierre de compra de tienda, 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. Ve a la tienda.
  2. Añada un producto al carro de compras y continúe con el cierre de compra.
  3. Seleccione una forma de pago.

Resultados esperados:

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

Resultados reales:

Falta la forma de pago 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. Agregue hash al archivo csp_whitelist.xml de su módulo.

Problema: el cliente no puede realizar un pedido

Un cliente no puede realizar un pedido, 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. Ve a la tienda.
  2. Añada un producto al carro de compras y continúe con el cierre de compra.
  3. Seleccione una forma de pago.
  4. Haga clic en Realizar pedido.

Resultados esperados:

Puede realizar un pedido con éxito.

Resultados reales:

No eres capaz de hacer un pedido. 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