为什么ElementRef不安全,如果是这样,我们可以使用什么呢?
我一直在使用这个ElementRef来查看或观看特定的html标签,然后在初始化后以特定宽度发送,但如果这样做会带来安全风险,我将不会使用它,说实话我不喜欢理解为什么有角度的2团队在他们的框架中允许这种安全漏洞。
使用哪种安全和最佳技术?我的测试组件如下:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-standard',
template: ` <button type="button" #buttonW></button>`,
})
export class standardComponent implements OnInit {
name: string = 'app-standard';
viewWidthButton: any;
@ViewChild( 'buttonW' ) elButtonW: ElementRef;
constructor() {
this.viewWidthButton = this.elButtonW.nativeElement.offsetWidth;
console.log ('button width: ' + this.viewWidthButton);
}
ngOnInit() {
}
}
Angular 2页面参考:
https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html
答案 0 :(得分:9)
使用ElementRef
并不能直接降低您网站的安全性。 Angular团队正在说&#34;嘿,你可以使用它,只要小心它&#34; 。
如果您只使用ElementRef
到获取信息,例如在您的示例中使用某个宽度,则根本不存在安全风险。当您使用ElementRef
修改DOM 时,情况会有所不同。在那里,可能会出现潜在威胁。这样的例子可能是:
@ViewChild('myIdentifier')
myIdentifier: ElementRef
ngAfterViewInit() {
this.myIdentifier.nativeElement.onclick = someFunctionDefinedBySomeUser;
}
这个问题是它直接插入到DOM中,跳过了角度消毒机制。什么是卫生处理机制?通常,如果通过Angular更改DOM中的某些内容,Angular会确保它没有任何危险。但是,当使用ElementRef将某些内容插入DOM时,Angular无法保证这一点。因此,当使用ElementRef
时,你的责任就是没有什么不好的东西进入DOM。这里一个重要的关键字是XSS(跨站点脚本)。
总结一下:如果您在DOM中查询信息,那么您就是安全的。如果您使用ElementRef
修改DOM,请确保修改不得包含恶意代码。