FlawOpen

flawopen.com/Sécurité Angular/Angular

Protection XSS d’Angular : valeurs sûres et API de contournement

Page de référence
Réponse courte

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.

RISKY — the escape hatch
this.safeHtml = this.sanitizer
  .bypassSecurityTrustHtml(comment);
// <div [innerHTML]="safeHtml"></div>
PLUS SÛR — conserver l’entrée non fiable comme texte
<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.

Angular assainit-il toutes les façons d’écrire dans le DOM ?

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.

Références

À voir aussi Cross-Site Scripting (XSS, CWE-79) : fonctionnement et prévention dans chaque langage — flawopen.com XSS par MIME sniffing : Content-Type et nosniff CSP et échappement de sortie : faut-il les deux ? dangerouslySetInnerHTML est-il sûr dans React ? DOMPurify suffit-il pour sécuriser innerHTML ? Markdown protège-t-il contre les XSS ? Svelte protège-t-il du XSS par défaut ?