0

目标:将字符串变量从 Angular 应用程序(typesript)发送到位于另一台服务器上的 iFrame,以便它可以在有条件的情况下使用

问题:如何专门将 DomSanitizer 用于变量?

文档状态类型为:HTML、样式、脚本、网址。如果我只想发送一个纯字符串变量怎么办?文档对此并不清楚。

SecurityContext 显示相同的https://angular.io/api/core/SecurityContext。我试过脚本。我也尝试过清理方法,但它需要安全上下文。

我尝试使用脚本,但出现错误:错误:DomSanitizerImpl.push../node_modules/@angular/platform-的资源 URL 上下文中使用的不安全值(请参阅http://g.co/ng/security#xss )浏览器/fesm5/platform-b​​rowser.js.DomSanitizerImpl.sanitize

我阅读了(http://g.co/ng/security#xss)和(https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Security_concerns)以及其他文章关于 domsanitizer、postmessage、Angular 生命周期等,我尝试将代码放在文件的不同区域,包括 onload 等。

聊天组件.html:

<div class="iframe-container"> 
    <iframe id="iframe_chatui" src="{{ chatURL }}/loading.html" class="chatiframe" allow="microphone; camera"></iframe>
</div>

聊天组件.ts:

ngAfterViewInit() {        
        this.safeScript = this.domSanitizer.bypassSecurityTrustScript(this.localeId);
        let frame = document.getElementById('iframe_chatui');           
    }

当我添加以下内容时,出现错误:无法读取 null 的属性“contentWindow”

let frame = document.getElementById('iframe_chatui') as HTMLIFrameElement;       
frame.contentWindow.postMessage(this.localeId, '*');
4

1 回答 1

0

尝试使用bypassSecurityTrustResourceUrl绕过角度安全。然后使用函数中的这个值来调用 iframe。

但要非常小心,您正在绕过内置的角度安全机制。如果您信任该 URL,并确保它仅来自您的来源,那么您可以使用该功能。

这是角度文档的链接: https ://angular.io/api/platform-b​​rowser/DomSanitizer#bypassSecurityTrustResourceUrl

我建议阅读有关 owasp 网站上可能发生的 URL 攻击的信息。确保您的网址通过以下链接中提到的正则表达式: https ://www.owasp.org/index.php/OWASP_Validation_Regex_Repository

于 2019-08-30T18:58:56.670 回答