不推荐使用ElementRef和@ViewChild?

时间:2019-02-01 15:09:32

标签: angular

我是Angular的新手,我尝试了解:

@ViewChild指令在没有Elementref的情况下有什么用?

Elementref是否直接访问DOM?或虚拟DOM?

为什么角度小组说:“允许直接访问DOM会使您的应用程序更容易受到XSS攻击。”这意味着Vanila JS由于声称:JavaScript访问DOM是危险的?

2 个答案:

答案 0 :(得分:3)

ViewChild是一个属性装饰器,可帮助您注入对组件或DOM引用的引用。
就您而言,您担心后者。 ElementRef包装对DOM元素的引用。

Angular提供了用于DOM操作的工具,例如Renderer-具有内置的清理机制,如果您使用ElementRef来修改DOM,则需要处理自己的清理机制(因为绕过了为了避免XSS攻击,对Angular DOM进行了消毒)。如果您不修改DOM,从设计上来说就是安全的。

答案 1 :(得分:0)

我不同意使用DOM直接冒XSS攻击的风险。

毕竟,Angular runtime正在这样做!另外,客户端独有的服务器提供给浏览器的任何内容。服务器与浏览器之间没有任何关系。

  1. 必须要有人在客户端处,并在客户端的URL中键入一个恶意参数。然后必须将该参数插入输入框。
  2. 实际上,有些人必须在服务器端修改源代码才能调用不受信任的代码。

在这一点(第2点),服务器完整性存在更大的问题。重点是,直接修改dom是每个网站的工作(DOM解析html),而Angular运行时会进行广泛的修改,因为它构建每个元素,而不是DOM解析html表。

我知道很多人会为此而发火。