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:
- Ir a Sales > Orders.
- 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:
-
Whitelist los scripts bloqueados mediante la clase
SecureHtmlRenderer
. -
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
enMagento\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(); } }
-
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:
- Ir a Sales > Orders.
- Cree un nuevo pedido.
- Crear un cliente nuevo.
- Introduzca los detalles del cliente.
- Introduzca los detalles del pedido (productos, método de envío).
- 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:
-
Whitelist los scripts bloqueados mediante la clase
SecureHtmlRenderer
. -
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
enMagento\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(); } }
-
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:
- Ir a Sales > Orders.
- Cree un nuevo pedido.
- Crear un cliente nuevo.
- Introduzca los detalles del cliente.
- Introduzca los detalles del pedido (productos, método de envío).
- Seleccione una forma de pago.
- 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:
-
Whitelist los scripts bloqueados mediante la clase
SecureHtmlRenderer
. -
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
enMagento\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(); } }
-
Agregue hash al archivo
csp_whitelist.xml
de su módulo.