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

输入的字符必须使用正则表达式!

希望能帮助到你 !

10-05 20:46
查看更多