flawopen.com/Sécurité Angular/Angular
Protection XSS d’Angular : valeurs sûres et API de contournement
Angular considère les valeurs des liaisons de template comme non fiables : l’interpolation échappe le texte et les liaisons HTML et URL appliquent un assainissement contextuel. La frontière dangereuse est la confiance explicite : bypassSecurityTrust* demande à Angular d’ignorer son assainissement normal pour cette valeur. N’utilisez cette API qu’après avoir validé et construit la valeur pour le contexte de sécurité exact où elle sera utilisée.
this.safeHtml = this.sanitizer
.bypassSecurityTrustHtml(comment);
// <div [innerHTML]="safeHtml"></div>
<div>{{ comment }}</div>
// l’interpolation échappe le balisage en texte
Ce qu’Angular assainit — et ce qu’il ne peut pas
Angular échappe le texte interpolé et assainit les valeurs non fiables dans les contextes HTML et URL. Par exemple, [innerHTML] supprime le balisage dangereux tout en conservant le HTML sûr ; l’interpolation ordinaire n’interprète pas le balisage. Une URL de ressource (comme la source d’un iframe chargeant du contenu exécutable) ne peut pas être assainie génériquement, car elle peut désigner du code arbitraire. Ne transmettez jamais de valeurs contrôlées par un attaquant à bypassSecurityTrustHtml, bypassSecurityTrustUrl, bypassSecurityTrustResourceUrl ni aux API de contournement apparentées : elles déclarent la valeur sûre pour un contexte précis et ignorent l’assainissement. Pour une intégration légitime, construisez l’URL depuis une origine fixe et un identifiant validé juste avant de la marquer comme fiable.
Auditer les API de contournement et les sinks DOM
grep -rn "bypassSecurityTrust" --include="*.ts" .Questions fréquentes
Défense en profondeur avec CSP et Trusted Types
Utilisez Content Security Policy (CSP) et imposez Trusted Types en défense en profondeur, en complément des liaisons Angular sûres. Angular exige la stratégie Trusted Types angular#unsafe-bypass lorsqu’une application appelle DomSanitizer.bypassSecurityTrust*. Supprimez ces appels si possible ; sinon, inventoriez chaque point d’appel et ne faites confiance qu’aux valeurs validées pour leur contexte exact.
Non. Les liaisons de template bénéficient des protections du framework, mais les API DOM directes, ElementRef et les bibliothèques DOM tierces peuvent les contourner. Préférez les liaisons de template, auditez ces sinks séparément et ne marquez pas une entrée comme fiable sans la valider pour le contexte exact.