Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

77
Vistas
Controlador de eventos en línea de optimización CSS de Angular 12 con política de seguridad de contenido

Después de actualizar a Angular 12, mi política de seguridad de contenido bloquea los estilos para que no se carguen correctamente.

El kit de desarrollo Angular 12 parece agregar un nuevo controlador de eventos en línea a la referencia del paquete CSS en index.html, ejemplo a continuación.

 <link rel="stylesheet" href="styles.5951e4ca367b697db091.css" crossorigin="anonymous" integrity="sha384-2031E8+oC87S0N7NzRGcF8fqx777KEJOgQ3KcUN4aX6xsR3BVaV5sh4fibR5joOc" media="print" onload="this.media='all'">

Error

 Refused to execute inline event handler because it violates the following Content Security Policy directive...

Esto parece estar relacionado con este RFC: https://github.com/angular/angular-cli/issues/18730 pero no puedo encontrar más información sobre cómo usarlo con un estricto (no 'inseguro-en línea' ) CSP.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Tuve el mismo problema después de la actualización de Angular 12.

La solución para mí fue establecer la optimización de la opción del espacio de trabajo "inlineCritical" en falso. La opción inlineCritical se cambió en Angular 12 al valor predeterminado verdadero para mejorar First Contentful Paint, consulte https://angular.io/guide/workspace-config#styles-optimization-options

aquí hay un ejemplo de configuración del espacio de trabajo

 "project": { "architect": { "build": { "configurations": { "production": { "optimization": { "scripts": true, "styles": { "minify": true, "inlineCritical": false }, "fonts": true } } } } } },
over 4 years ago · Santiago Trujillo Denunciar

0

¡ATENCIÓN! Respuesta actualizada

RESPUESTA ACTUALIZADA (16 de julio de 2021)

La solución original publicada a continuación rompe Safari (MacOS), por lo que tuvimos que retroceder y deshabilitar la optimization.styles.inlineCritical .

Además, como comenta masterfloda a continuación, la elección debe ser la seguridad sobre el rendimiento en la mayoría de los casos, si no en todos. Mi pensamiento original era que sería difícil de explotar ( unsafe-hashes ), pero no he realizado una puntuación de riesgo de InfoSec exhaustiva al respecto.

Hay un ticket abierto para esto en el repositorio de Angular - #20864 . Le sugiero que deshabilite la optimization.styles.inlineCritical por ahora y que le guste y se suscriba a ese problema.


RESPUESTA ORIGINAL (9 de junio de 2021)

Sí, este problema fue introducido por las opciones de optimización de Estilos de Angular v12 ( inlineCritical: true ) que agrega un controlador de eventos de onload a la etiqueta de enlace para la hoja de estilo principal de la siguiente manera:

<link rel="stylesheet" href="styles.<hash>.css" media="all" onload="this.media='all'">

Se puede resolver sin deshabilitar inlineCritical o habilitar 'unsafe-inline' en el CSP, de la siguiente manera:

  • Hash el contenido del controlador de carga: onload this.media='all'
  • Report URI tiene una herramienta útil para eso: Script And Style Hasher
  • Agregue el hash a la directiva script-src en el CSP
  • Para Chrome (pero no para FF), también debe agregar 'unsafe-hashes' a la directiva script-src ; de lo contrario, se bloquea con el siguiente registro en la consola: tenga en cuenta que los hashes no se aplican a los controladores de eventos, atributos de estilo y javascript: navegaciones a menos que esté presente la palabra clave 'unsafe-hashes'
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda