it-swarm.com.de

anglejs + Cross-Site-Scripting verhindern

Is Angularjs kümmert sich um den XSS-Angriff. Ich habe gelesen, dass ng-bind aufpasst. Aber wenn ich versuche, ein Beispiel zu machen, um das zu testen, erlaubt es mir, HTML-Tags in den Eingabetyp mit ng-model einzufügen ... es ist den HTML-Tags nicht entgangen.

Ich habe viele Eingabeelemente auf unserer Seite, die mit ng-model verknüpft sind. Was muss ich tun, um sicherzustellen, dass bei der Eingabe von HTML-Tags die HTML-/Scrip-Tags von Angular ignoriert werden?.

ex.

<input id="name" ng-model="name"></input>

wenn ich eingebe als

'Hello, <b>World</b>!'

$ scope.name enthält dasselbe, was ich eingegeben habe, ohne die Tags auszuschließen. d.h.

  var val = $scope.name;
  console.log(val); 

druckt genauso

'Hello, <b>World</b>!'

Bitte lassen Sie mich wissen, wie man dies in AngularJs löst.

danken

20
dav10

Schauen Sie hier nach: http://docs.angularjs.org/api/ngSanitize/service/$sanitize

Wenn du entkommen willst, benutze ng-bind, es wird das Tag ohne Interpretation so rendern:

Hello <b>World</b> nicht wie Hallo Welt !

Verstehst du ? Daher ist ng-bind sicher, da es sich nicht um HTML-Tags handelt.

Wenn Sie möchten, dass Ihre HTML-Tags interpretiert werden, aber sicher sind, verwenden Sie einfach ng-bind-html!

Wenn Sie beispielsweise diese Zeichenfolge anzeigen möchten:

'Hello <b>World</b><input type="text" />'

Das Ergebnis ist: Hallo Welt aber ohne Eingabe, da der AngularJS-Compiler den $ sanitize-Dienst verwendet und eine Whitelist mit HTML-Elementen prüft und ein iput nicht autorisiert ist.

Vielleicht ist ng-bind-html das, wonach Sie suchen.

Wenn Sie nur sicherstellen möchten, dass der Benutzer keine HTML-Tags in Ihre Eingabe einfügen kann, verwenden Sie einfach das Direktiven-ng-Muster für Ihre Eingaben!

http://docs.angularjs.org/api/ng/directive/input

Zulässige Zeichen in Ihrer Eingabe müssen regulär eingegeben werden!

Ich hoffe es hilft !

27
Thomas Pons

Ich glaube nicht, dass AngularJS eine standardmäßige Validierung von Whitelist-Eingaben hat, was Ihre Testübungen sind. Ein Benutzer kann also so ziemlich alles eingeben, was er möchte. Dies ist nicht überraschend - Whitelists sind sehr domänenspezifisch und Angular ist ein Framework, das für eine Vielzahl von Domains entwickelt wurde.

Die Hauptverteidigung gegen XSS besteht darin, alle nicht vertrauenswürdigen Daten korrekt zu codieren (siehe https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_ (XSS) ). Dies macht Angular standardmäßig.

Das Fazit ist, dass AngularJS standardmäßig vor XSS geschützt sein soll, ohne dass besondere Maßnahmen erforderlich sind. Sie können einige grundlegende Szenarien überprüfen, indem Sie versuchen, Ihre Eingaben in eine Ansicht mit der normalen {{scopevariable}} - Notation auszugeben.

Ich habe eine detaillierte Analyse der AngularJS XSS-Sicherheitsanfälligkeit gefunden: https://code.google.com/p/mustache-security/wiki/AngularJS . Am Ende der Kommentare befindet sich ein Link zu einem Google-Dokument mit weiteren Diskussionen und Antworten des angular -Teams.

10
Steve Campbell