我想知道以下内容之间的区别:
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] 删除。
我来说两句