Ich habe einen Übersetzungsschlüssel, der eigentlich ein HTML-Code ist, sowohl codiert als auch uncodiert.Angular translate richtlinie vs filter: ist XSS möglich?
$scope.translations = {
"html_code" : "<script>alert('Alert!');</script>",
"html_code_full" : "<script>alert('Alert!');</script>",
"greeting" : "Welcome!"
}
Wenn ich diese Werte verwenden, den übersetzten Text in Ansicht anzuzeigen, verwende ich zwei Methoden:
- Als Richtlinie
<span translate>{{translations.html_code}}</span>
- als Filter
{{translations.html_code|translate}}
ich das gleiche versuchen für translations.html_code_full
. Hier ist der Code für die Ansicht:
translations.html_code = {{translations.html_code|translate}}
translations.html_code = <span translate>{{translations.html_code}}</span>
translations.html_code_full = {{translations.html_code_full|translate}}
translations.html_code_full = <span translate>{{translations.html_code_full}}</span>
Dies ist die Ausgabe erhalte ich:
translations.html_code = <script>alert('Alert!');</script>
translations.html_code = <script>alert('Alert!');</script>
translations.html_code_full = <script>alert('Alert!');</script>
translations.html_code_full =
Wie es klar ist, dass die Richtlinie die Umsetzung der Übersetzungsschlüssel auf HTML codiert, aber Filter nicht. Warum ist der Unterschied in der Ausgabe zwischen Direktive und Filterimplementierung? Und warum erhalte ich keine Warnung, wenn der HTML-Code gerendert wird?
Here is the plunk ich für Demo erstellt.
Genau das habe ich versucht. In einer anderen Web-App konnte ich die Warnung erhalten, aber irgendwie konnte ich in der Demo nicht reproduzieren. Ich wollte nur den * sichereren Weg wissen, um translate zu verwenden, d. H. Filter vs directive, um XSS zu verhindern. –
Ein guter Einstieg ist der [AngularJS Developer Guide - Sicherheit] (https://docs.angularjs.org/guide/security). Sehen Sie sich dann die [AngularJS $ sce API-Referenz] (https://docs.angularjs.org/api/ng/service/$sce) an. SCE hilft dabei, Code so zu schreiben, dass (a) standardmäßig sicher ist, und (b) das Auditing auf Sicherheitslücken wie XSS, Clickjacking usw. viel einfacher macht. – georgeawg
Ich habe das gleiche Problem. Ich kann einen CSS-Angriff lokal in meiner App mit der Translate-Richtlinie reproduzieren, während der Filter sicher zu sein scheint - aber wenn ich versuche, ein Plunkr zu machen, das dieses Problem widerspiegelt, funktioniert das CSS nicht und das Skript wird korrekt herausgefiltert. versuchte Versionen 2.8.1 und 2.9.0 von ng-translate. versuchte verschiedene Sanitaze-Strategien, aber auch nicht funktioniert. Ich frage mich, ob es da draußen ein Sicherheitsloch für die Übersetzungsrichtlinie gibt. –