在Angular中处理用户输入时,我在多大程度上担心安全性(XSS)?

时间:2017-12-08 15:02:46

标签: angular security escaping xss sanitization

  

为了系统地阻止XSS错误,Angular默认将所有值视为不受信任。当一个值从模板,通过属性,属性,样式,类绑定或插值插入到DOM中时,Angular会清理并转义不受信任的值。

     

Angular模板与可执行代码相同:模板中的HTML,属性和绑定表达式(但不是绑定的值)被认为是安全的。这意味着应用程序必须防止攻击者可以控制的值永远使其成为模板的源代码。永远不要通过连接用户输入和模板来生成模板源代码。要防止出现这些漏洞,请使用脱机模板编译器,也称为模板注入。

这是Angular关于XSS的说法。然而,似乎第一段与第二段相矛盾(如果我错了,请纠正我)。所以我的问题是:我是否需要逃避并消毒我的用户输入?

1 个答案:

答案 0 :(得分:1)

代码是值得信赖的,但价值观并非如此。如果使用普通的Angular数据绑定插入值,则会根据需要对它们进行编码,因为Angular可以识别什么是值以及什么是代码。

例如,这不需要任何额外的转义:

<h1>Hello {{yourName}}!</h1>

但是如果您尝试使用字符串连接创建模板。例如:

'<h1>Hello ' + yourName + '!</h1>'

或使用像PHP这样的服务器端语言:

<h1>Hello <?= $_GET['name'] ?> !</h1>

然后Angular无法区分文字html和插入值。像这样插入的数据现在可以注入Javascript和Angular语法。

只要您坚持使用正常的Angular机制来插入值,那么您就不需要额外的编码。这些漏洞来自绕过角度并直接以其他方式插入值。