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中解决这个问题。
感谢
答案 0 :(得分:26)
请看这里:http://docs.angularjs.org/api/ngSanitize/service/$sanitize
如果你想要使用ng-bind
转义,它会像标题一样呈现标签:
Hello <b>World</b>
不喜欢Hello World !
如果您想要解释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。在评论的最后,有一个链接到谷歌文档,进一步讨论和角色团队的回应。