angularjs +跨站脚本防止

时间:2014-04-11 08:51:38

标签: angularjs xss cross-site

Angularjs是否负责XSS攻击。我读过ng-bind需要注意。但是当我尝试做一个样本来测试时,它允许我在输入类型中使用ng-model插入html标签...它没有逃脱Html标签。

我的页面中有很多输入元素,它与ng-model绑定,我该怎么做以确保输入html标签,angular忽略html / scrip标签。

离。

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

如果我输入为

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

$ scope.name包含与我输入的内容相同的内容,但未排除标记。即

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

打印相同

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

请让我知道如何在angularjs中解决这个问题。

感谢

2 个答案:

答案 0 :(得分:26)

请看这里:http://docs.angularjs.org/api/ngSanitize/service/$sanitize

如果你想要使用ng-bind转义,它会像标题一样呈现标签:

Hello <b>World</b>不喜欢Hello World

你知道吗?所以ng-bind是安全的,因为它不关心HTML标签。

如果您想要解释HTML标签,请安全地使用ng-bind-html!

例如,如果要显示此字符串:

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

结果将是:Hello World 但没有输入,因为AngularJS编译器使用$ sanitize服务并检查HTML元素的白名单,并且未授权iput。

也许ng-bind-html正是你要找的。

如果您只是想确保用户无法在输入中输入html标签,请在输入中使用指令ng-pattern!

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

输入中允许的字符需要正则表达式!

希望它有所帮助!

答案 1 :(得分:10)

我不相信AngularJS具有默认的白名单输入验证,这是您的测试练习。因此,用户可以输入任何他们喜欢的内容。这并不奇怪 - 白名单非常具有领域特色,Angular是一个专为各种领域设计的框架。

对XSS的主要防御是正确编码所有不受信任的数据(参见https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS))。这个,Angular默认情况下。

最重要的是,AngularJS默认是从XSS安全的,不需要特殊操作。您可以尝试使用常规{{scopevariable}}表示法输入输入到视图中的内容来验证一些基本方案。

我确实找到了AngularJS XSS漏洞的详细分析:https://code.google.com/p/mustache-security/wiki/AngularJS。在评论的最后,有一个链接到谷歌文档,进一步讨论和角色团队的回应。