Angularjs是否负责XSS攻击。我读过ng-bind会很小心。但是,当我尝试做一个示例进行测试时,它允许我使用ng-model以输入类型插入html标记...但是它并没有逃脱HTML标记。
我的页面中有很多输入元素,它们与ng-model绑定(bind)在一起,应该怎么做才能确保是否输入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中解决此问题。
谢谢
最佳答案
看这里:http://docs.angularjs.org/api/ngSanitize/service/$sanitize
如果您想使用ng-bind
进行转义,它将渲染标签而不进行类似的解释:Hello <b>World</b>
不像Hello 世界!
你理解吗 ?因此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
输入的字符必须使用正则表达式!
希望能帮助到你 !