flawopen.com/Seguridad de Angular/Angular
Protección XSS de Angular: valores seguros y APIs de omisión
Angular considera no confiables los valores de los enlaces de plantilla: la interpolación escapa el texto y los enlaces HTML y URL aplican saneamiento contextual. El límite peligroso es la confianza explícita: bypassSecurityTrust* indica a Angular que omita el saneamiento habitual de ese valor. Úsalo solo después de validar y construir el valor para el contexto de seguridad exacto donde se utilizará.
this.safeHtml = this.sanitizer
.bypassSecurityTrustHtml(comment);
// <div [innerHTML]="safeHtml"></div>
<div>{{ comment }}</div>
// la interpolación escapa el marcado como texto
Qué sanea Angular y qué no puede sanear
Angular escapa el texto interpolado y sanea valores no confiables en contextos HTML y URL. Por ejemplo, [innerHTML] elimina el marcado peligroso y conserva HTML seguro; la interpolación normal ni siquiera interpreta el marcado. Una URL de recurso (como la fuente de un iframe que carga contenido ejecutable) no se puede sanear de forma genérica porque puede señalar código arbitrario. Nunca pases valores controlados por atacantes a bypassSecurityTrustHtml, bypassSecurityTrustUrl, bypassSecurityTrustResourceUrl ni a otras APIs de omisión: afirman que el valor es seguro para un contexto específico y omiten el saneamiento. Para una inserción legítima, construye la URL a partir de un origen fijo y un identificador validado justo antes de marcarla como confiable.
Audita las APIs de omisión y los sinks del DOM
grep -rn "bypassSecurityTrust" --include="*.ts" .Preguntas frecuentes
Defensa en profundidad con CSP y Trusted Types
Use Content Security Policy (CSP) y aplique Trusted Types como defensa en profundidad junto con los bindings seguros de Angular. Angular requiere la política Trusted Types angular#unsafe-bypass cuando una aplicación llama a DomSanitizer.bypassSecurityTrust*. Prefiera eliminar esas llamadas; si alguna es necesaria, inventaríe cada punto de llamada y confíe solo en valores validados para su contexto exacto.
No. Los enlaces de plantilla reciben las protecciones del framework, pero las API directas del DOM, ElementRef y las bibliotecas DOM de terceros pueden eludirlas. Prefiere los enlaces de plantilla, audita esos sinks por separado y no marques una entrada como confiable sin validarla para el contexto de seguridad exacto.