Angular的bypassSecurityTrustHtml管道如何在后台运行?

时间:2018-11-18 22:11:46

标签: angular

我使用了SafeHtml管道的变体,但是我想知道它实际上是如何在后台运行的。 Angular如何知道应用到DOM的文本已经通过管道传递并且是安全的?是在编译阶段完成还是在运行时检查?

documentation说:

  

调用任何bypassSecurityTrust ... API会禁用Angular的   对传入的值进行内置消毒

安全HTML管道的常见实现:

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';

@Pipe({name: 'sanitizeHtml'})
export class SanitizeHtmlPipe implements PipeTransform {
  constructor(private _sanitizer:DomSanitizer) {
  }
  transform(v:string):SafeHtml {
    return this._sanitizer.bypassSecurityTrustHtml(v);
  }
}

更新:从dom_sanitization_service.ts source中找出来。 bypassSecurityTrustHtml函数返回一个new SafeHtmlImpl(value);实例。在sanitize过程中,将进行检查:if (value instanceof SafeHtmlImpl),如果是,则跳过消毒过程

1 个答案:

答案 0 :(得分:1)

我认为您误解了函数的要点。 它实际上并没有进行清理,甚至不检查HTML。 它所做的只是创建一个设置了标志的对象,因此Angular安全不会阻止它。如果该字符串包含不安全的HTML,则不会被阻止。

开发人员仍然应该自己编写一些函数或使用其他工具来确保HTML是安全的。