Angular中的sanitize和绕过SecurityTrustHtml有什么区别?

Ferralucho

我想知道以下内容之间的区别:

import {Component, SecurityContext} from '@angular/core'

export class App {
  divContent: any;
  constructor(private sanitizer: DomSanitizer) {
    this.divContent= sanitizer.sanitize(SecurityContext.HTML, "divContent");
  }

并替换为:

sanitizer.bypassSecurityTrustHtml("divContent");

我希望设置div的内部HTML

<div [innerHTML]="divContent"></div>

在这种情况下,使用任一选项是否相同?

文斯

Angular文档中,您的问题的简短答案是sanitize(在您当前使用的那个)大多数情况下是更安全,更可取的方法

DomSanitizer.sanitize 将为您清除该值,以便可以在给定的SecurityContext中使用它(在您的示例中为HTML):

sanitizer.sanitize(SecurityContext.HTML, "divContent");

引用文档,

如果上下文信任某个值,则此方法将解开包含的安全值并直接使用它。否则,值[第二个参数]将在给定的上下文中被清理为安全的,例如,通过替换具有不安全的协议部分(例如javascript:)的网址该实现负责确保在给定的上下文中可以安全地使用该值。

DomSanitizer.bypassSecurityTrustHtml简单地绕过安全检查,并假定给定的值是安全的HTML。该文档指定

仅当绑定的HTML不安全(例如,包含<script>标签)并且应执行代码时,才使用[byPassSecurityTrustHtml] 清理程序将保留安全的HTML,因此在大多数情况下,不应使用此方法。

从本质上讲,sanitize通过转换传给它的值(如果不是很安全的话)来确保它是安全的,如果是的话,则不做任何处理,而bypassSecurityTrustHtml盲目地相信您提供的HTML是安全的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章