web-dev-qa-db-fra.com

angularjs + cross-site scripting empêchant

Is Angularjs s'occupe des attaques XSS. J'ai lu que ng-bind prend soin. Mais quand j'essaie de faire un échantillon pour tester cela, cela me permet d'insérer des balises html dans le type d'entrée avec ng-model ... cela n'a pas échappé aux balises Html.

J'ai beaucoup d'éléments d'entrée dans notre page, qui se lie avec ng-model, que dois-je faire pour m'assurer que si j'entre des balises html, angular ignore les balises html/script.

ex.

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

si j'entre comme

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

$ scope.name contient le même que ce que j'ai entré, n'a pas exclu les balises. c'est à dire

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

imprime comme le même

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

Veuillez me faire savoir comment résoudre ce problème dans angularjs.

remercier

20
dav10

Regardez ici: http://docs.angularjs.org/api/ngSanitize/service/$sanitize

Si vous voulez vous échapper, utilisez ng-bind, il rendra la balise sans interprétation comme ça:

Hello <b>World</b> pas comme Bonjour Monde !

Comprenez vous ? donc ng-bind est sûr car il ne se soucie pas des balises HTML.

Si vous voulez que vos balises HTML soient interprétées mais en toute sécurité, utilisez simplement ng-bind-html!

Par exemple, si vous souhaitez afficher cette chaîne:

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

Le résultat sera: Bonjour Monde mais sans l'entrée car le compilateur AngularJS utilise le service $ sanitize et vérifie une liste blanche d'éléments HTML et un iput n'est pas autorisé.

Peut-être que ng-bind-html est ce que vous recherchez.

Si vous voulez juste être sûr que l'utilisateur ne peut pas mettre de balises html dans votre entrée, utilisez simplement la directive ng-pattern sur vos entrées!

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

Il faut une expression régulière pour les caractères autorisés dans votre entrée!

J'espère que cela aide !

27
Thomas Pons

Je ne crois pas qu'AngularJS dispose d'une validation d'entrée par défaut sur liste blanche, ce que vos tests testent. Ainsi, un utilisateur peut à peu près saisir tout ce qu'il veut. Cela n'est pas surprenant - les listes blanches sont très spécifiques au domaine et Angular est un cadre conçu pour un large éventail de domaines.

La principale défense contre XSS est de coder correctement toutes les données non fiables (voir https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_ (XSS) ). Ceci, Angular fait par défaut.

En fin de compte, AngularJS est destiné à être sécurisé par défaut de XSS, aucune action spéciale n'est requise. Vous pouvez vérifier certains scénarios de base en essayant de générer ce que vous saisissez dans une vue à l'aide de la fonction normale {{scopevariable}} notation.

J'ai trouvé une analyse détaillée de la vulnérabilité d'AngularJS XSS: https://code.google.com/p/mustache-security/wiki/AngularJS . À la fin des commentaires, il y a un lien vers un document Google avec plus de discussion et de réponse de l'équipe angular.

10
Steve Campbell