Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

193
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!