Skip to content

修复 OWASP Top 10 漏洞:Angular 18.1.1 - DZone

Published: at 12:00 AM

修复 OWASP Top 10 漏洞:Angular 18.1.1 - DZone

摘要

详细讨论在 Angular 18.1.1v 版本的 Web 应用程序中如何配置和减轻安全漏洞的示例。


加入 DZone 社区,体验完整的会员体验。

免费加入

最新发布的 Angular 18.1.1 版本提供了丰富的功能,用于开发健壮且可扩展的 Web 应用程序。但安全性仍然是一个关注点。在这篇文章中,我们将详细讨论如何在 Angular 18.1.1v Web 应用程序中配置并减轻这些漏洞。

1. 注入攻击

注入漏洞(SQL、NoSQL 和 OS 命令注入)发生在不可信数据被发送到位于机器或查询中的解释器时。

缓解措施

import { DomSanitizer } from '@angular/platform-browser';

constructor(private domSanitizer: DomSanitizer) {}

safeHtml(html: string) {
  return this.domSanitizer.bypassSecurityTrustHtml(html);
}

2. 认证机制漏洞

当认证机制实现不当时,攻击者可以破坏密码、密钥或会话令牌。

缓解措施

import { Injectable } from "@angular/core";
import {
  HttpEvent,
  HttpInterceptor,
  HttpHandler,
  HttpRequest,
} from "@angular/common/http";
import { Observable } from "rxjs";

@Injectable()
export class AppAuthInterceptor implements HttpInterceptor {
  intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    const authToken = this.getUserAuthToken();
    const authRequest = req.clone({
      headers: req.headers.set("Authorization", `Bearer ${authToken}`),
    });
    return next.handle(authRequest);
  }

  getUserAuthToken() {
    return localStorage.getItem("authToken");
  }
}

3. 敏感数据曝光

个人信息、医疗信息、信用卡号码等敏感数据的信息安全必须得到保障。

缓解措施

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";

@Injectable({
  providedIn: "root",
})
export class AppSecureService {
  constructor(private http: HttpClient) {}

  getUserSecureData() {
    return this.http.get("https://secureapi.example.com/data");
  }
}

4. XML 外部实体 (XXE)

配置不当的 XML 解析器处理输入(使用对外部实体的引用的 XML)时,会形成 XXE 攻击。

缓解措施

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";

@Injectable({
  providedIn: "root",
})
export class SecureXmlDataService {
  constructor(private http: HttpClient) {}

  getXmlData() {
    return this.http.get("https://secureapi.example.com/data", {
      responseType: "text",
    });
  }
}

5. 访问控制漏洞

这是针对经过认证的用户缺乏严格权限控制。

缓解措施

import { Injectable } from "@angular/core";
import { CanActivate, Router } from "@angular/router";

@Injectable({
  providedIn: "root",
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router) {}

  canActivate(): boolean {
    const isAuthenticated = this.checkIfAuthenticated();
    if (!isAuthenticated) {
      this.router.navigate(["login"]);
    }
    return isAuthenticated;
  }

  checkIfAuthenticated(): boolean {
    return !!localStorage.getItem("authToken");
  }
}

6. 安全配置错误

漏洞 可能允许未经验证的攻击者获得特权访问或执行受限操作。

缓解措施

// angular.json
{
  "projects": {
    "app": {
      "architect": {
        "build": {
          "options": {
            "optimization": true,
            "outputHashing": "all",
            "sourceMap": false,
            "extractCss": true,
            "namedChunks": false,
            "aot": true,
            "extractLicenses": true,
            "vendorChunk": false,
            "buildOptimizer": true
          }
        }
      }
    }
  }
}

7. 跨站脚本攻击 (XSS)

XSS 漏洞发生在 Web 应用程序将用户提供的数据直接包含到输出页面中,而没有进行适当的验证或转义时。

缓解措施

import { Component } from "@angular/core";

@Component({
  selector: "app-safe-test-component",
  template: `<div [innerHTML]="safeTestHtml"></div>`,
})
export class SafeComponent {
  safeTestHtml = "<p>Safe Content Test!</p>";
}

8. 不安全的反序列化

不安全的反序列化可能导致严重的后果,如远程代码执行或其他事件。

缓解措施

import { Injectable } from "@angular/core";

@Injectable({
  providedIn: "root",
})
export class SafeSerializationService {
  serializeData(data: any): string {
    return JSON.stringify(data);
  }

  deserializeData(json: string): any {
    return JSON.parse(json);
  }
}

9. 已知漏洞的组件

组件,如库、框架和其他与应用程序一起运行的具有相同权限的软件模块。

缓解措施

# 运行 npm audit 来查找和修复漏洞
npm audit fix

10. 缺乏监控和日志记录

日志记录和监控不足,加上缺乏或无效的与 事件响应 集成,使攻击者能够进一步攻击系统,保持持久性,转向更多系统篡改、提取或销毁数据。

缓解措施

import { Injectable } from "@angular/core";

@Injectable({
  providedIn: "root",
})
export class LoggingService {
  logMessage(message: string) {
    console.log(`[LOG] ${message}`);
  }

  logError(error: any) {
    console.error(`[ERROR] ${error}`);
  }
}

结论

遵循安全最佳实践并使用 Angular 18.1.1 的最新特性,您可以成功地保护您的应用程序免受 OWASP Top 10 漏洞 的影响。这不仅提高了应用程序的安全性,还增强了用户的信任感。