为了系统地阻止XSS错误,Angular默认将所有值视为不可信的。当一个值从模板中插入到DOM中时,通过属性、属性、样式、类绑定或插值,角清除和转义不受信任的值。 角模板与可执行代码相同:模板中的HTML、属性和绑定表达式(而不是绑定值)被信任为安全。这意味着应用程序必须防止攻击者控制的值将其写入模板的源代码。不要通过连接用户输入和模板来生成模板源代码。若要防止这些漏洞,请使用脱机模板编译器,也称为模板注入。
这就是角关于XSS的说法。然而,似乎第一段与第二段相矛盾(如果我错了,请纠正我)。所以我的问题是:我是否需要逃避并净化我的用户输入?
发布于 2017-12-08 21:27:01
代码是可信的,但是值是不可信的。如果您使用普通的角数据绑定插入值,那么它们将被适当地编码,因为角可以识别什么是值,什么是代码。
例如,这不需要任何附加转义:
<h1>Hello {{yourName}}!</h1>但是,如果您试图使用字符串连接创建模板。例如:
'<h1>Hello ' + yourName + '!</h1>'或者使用像PHP这样的服务器端语言:
<h1>Hello <?= $_GET['name'] ?> !</h1>则角不能区分文字html和插入值之间的区别。像这样插入的数据现在可以注入Javascript和角语法。
只要你坚持正常的角度机制插入值,那么你就不需要额外的编码。这些漏洞来自于绕过角和直接以其他方式插入值。
https://stackoverflow.com/questions/47716926
复制相似问题