2016-11-04 2 views
3

Ich habe gelesen, dass AngularJs eine Art Sandbox verwendet, um das Ausführen beliebiger Ausdrücke in {}} geschweiften Klammern zu verhindern. Abhängig von der Angular-Version gibt es mehrere Beispiele dafür, wie diese Sandbox zu entfernen ist. In der Version 1.4.0 - 1.4.9 funktioniert der folgende Codeausschnitt beispielsweise, wenn ich ihn in den Code einfüge.Was sind die Auswirkungen von Angularjs Sandbox Escaping?

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}} 

Was ich nicht verstehe ist, warum es so eine große Sache ist? Das obige Beispiel funktioniert nur, wenn der Ausdruck bereits in HTML war. Warum sollte ich Sandbox entkommen anstatt nur < 'Skript> mit regulären XSS injizieren?

{{<script>alert(1)</script>}} 

Wie funktioniert diese Sandbox entkommen, was bezieht sich auf $ sanieren und $ sce?

Antwort

3

Eine gute Antwort bezüglich des Unterschieds zwischen $ sce und $ sanitize finden Sie hier: When to use $sanitize and $sce ? What's differences between them? Ich empfehle Ihnen, die Dokumente auch zu lesen.

Sie haben auch einige gute Beispiele hier: https://docs.angularjs.org/api/ngSanitize/service/ $ sanieren

Update: Sie können diesen interessanten Blog sehen über Sandbox in AngualrJS entkommen. http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html Am Ende gibt es einige Beispiele für den Exploit, auch zu AngularJS 1.5X Versionen.

Ich fand auch diesen Artikel, der etwas mehr Licht auf Sandboxing und Sanitisierung werfen könnte.

Insbesondere diese XSS-Angriffe sind relevanter, wenn serverseitige und clide-Vorlagen gemischt werden (serverseitiges Rendering). Wie im Artikel erwähnt, "serverseitige Techniken zum Verhindern, dass XSS Sonderzeichen wie spitze Klammern codiert, aber nicht geschweifte Klammern kodiert, die einen AngularJS-Ausdruck anzeigen", ist es wahrscheinlich, warum das Anbringen von Tags nicht hilft und einen Weg zum Brechen findet Angulars Sandkasten war eine "große Sache".

+0

Ich kenne den Unterschied zwischen $ sce und $ sanitize. Was ich nicht weiß ist, ob diese Sandbox-Umgehung verwendet werden kann, um der Bereinigung zu entgehen oder die Sicherheit auf andere Weise zu verletzen. Wenn nicht, sollte ich mich dann darum sorgen? Ich frage, weil ich [einige Artikel] (http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html) darüber gelesen habe, aber ich tue immer noch ' t wie es in der Praxis eingesetzt werden kann. – JakubM

Verwandte Themen