首页 > 解决方案 > 使用 DomSanitizer 绕过 Angular 中的安全性时,如何安全地避免 Angular 中的 XSS 攻击?

问题描述

有时我们需要防止Angular 代码中的自动清理。使用 DomSanitizer非常简单。但是,如果代码真的很安全,我总是不太舒服。我发现了一些与 Angular Security 相关的文章,并且我通常会努力避免安全漏洞,但大多数时候都是凭直觉,所以仍然存在一些问题。

例如:

  1. 我们可以信任指向资产目录(或内部资源)的资源 url 吗?如何防止攻击者:

    1. 更改资产目录中的安全资源?
    2. 用不安全的网址替换安全网址(或安全资源网址)?当我需要这样做时,我通常会在方法中插入绕过代码(这样就够了吗?):
         getSafeResourceUrl(trustedUrl: string) {
           return this.domSanitizer.bypassSecurityTrustResourceUrl(trustedUrl);
        } 
    
  2. 将安全的 html 标签插入到方法内的已清理代码中是否安全?例如,下面的代码展示了管道实现的转换方法,其中搜索字符串被清理并被<em>标签包围:

      transform(value: string, search: string): SafeHtml {
        const sanitizedValue = this.sanitized.sanitize(
          SecurityContext.HTML, value + '');
    
        if (!search) {
          return sanitizedValue;
        }
    
        const sanitizedSearch = this.sanitized.sanitize(
            SecurityContext.HTML, search);
    
        const result = sanitizedValue.replace(
          new RegExp(sanitizedSearch, 'gi'),
            (match) => '<em>' + match + '</em>');
    
        return this.sanitized.bypassSecurityTrustHtml(result);
    }
    
  3. 更广泛地说,是否有一些指南可以安全地绕过自动 Angular 清理?

标签: angularsecurityxss

解决方案


推荐阅读