FlawOpen

flawopen.com/Angular-Sicherheit/Angular

Angular-XSS-Schutz: sichere Standards und Bypass-APIs

Referenzseite
Kurzantwort

Angular behandelt Werte in Template-Bindings als nicht vertrauenswürdig: Interpolation escaped Text, HTML- und URL-Bindings werden kontextabhängig bereinigt. Die gefährliche Grenze ist explizites Vertrauen: bypassSecurityTrust* weist Angular an, die normale Bereinigung dieses Werts zu überspringen. Verwende die API nur, nachdem du den Wert für den genauen Sicherheitskontext validiert und erstellt hast, in dem er eingesetzt wird.

RISKY — the escape hatch
this.safeHtml = this.sanitizer
  .bypassSecurityTrustHtml(comment);
// <div [innerHTML]="safeHtml"></div>
SICHERER — nicht vertrauenswürdige Eingaben als Text belassen
<div>{{ comment }}</div>
// Interpolation escaped Markup als Text

Was Angular bereinigt — und was nicht möglich ist

Angular escaped interpolierten Text und bereinigt nicht vertrauenswürdige Werte in HTML- und URL-Kontexten. [innerHTML] entfernt beispielsweise gefährliches Markup und erhält sicheres HTML; normale Interpolation interpretiert Markup gar nicht. Eine Resource-URL (etwa die Quelle eines iframes mit ausführbarem Inhalt) kann nicht allgemein bereinigt werden, da sie beliebigen Code bezeichnen kann. Übergib niemals angreiferkontrollierte Werte an bypassSecurityTrustHtml, bypassSecurityTrustUrl, bypassSecurityTrustResourceUrl oder verwandte Bypass-APIs: Sie erklären den Wert in einem bestimmten Kontext für sicher und überspringen die Bereinigung. Erzeuge für legitime Einbettungen die URL unmittelbar vor dem Vertrauen aus einem festen Ursprung und einer validierten Kennung.

Bypass-APIs und DOM-Sinks prüfen

grep -rn "bypassSecurityTrust" --include="*.ts" .

Häufige Fragen

Defense-in-Depth mit CSP und Trusted Types

Verwenden Sie Content Security Policy (CSP) und erzwingen Sie Trusted Types als zusätzliche Schutzschicht neben sicheren Angular-Bindings. Angular benötigt die Trusted-Types-Richtlinie angular#unsafe-bypass, wenn eine Anwendung DomSanitizer.bypassSecurityTrust* aufruft. Entfernen Sie solche Aufrufe nach Möglichkeit; andernfalls erfassen Sie jede Aufrufstelle und vertrauen Sie nur Werten, die für ihren genauen Kontext validiert wurden.

Bereinigt Angular jeden Weg, in das DOM zu schreiben?

Nein. Template-Bindings erhalten Framework-Schutz, direkte DOM-APIs, ElementRef und DOM-Bibliotheken von Drittanbietern können ihn jedoch umgehen. Bevorzuge Template-Bindings, prüfe diese Sinks separat und markiere Eingaben nur dann als vertrauenswürdig, wenn sie für den genauen Sicherheitskontext validiert wurden.

Quellen

Siehe auch Cross-Site-Scripting (XSS, CWE-79): Funktionsweise und Schutz in jeder Sprache — flawopen.com XSS durch MIME-Sniffing: Content-Type und nosniff CSP und Output-Escaping: Brauchst du beides? Ist dangerouslySetInnerHTML in React sicher? Reicht DOMPurify für sicheres innerHTML? Ist Markdown-Rendering vor XSS sicher? Schützt Svelte standardmäßig vor XSS?