Files
wehub-resource-sync d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:55:55 +08:00

4.0 KiB

paths
paths
**/*.component.ts
**/*.component.html
**/*.service.ts
**/*.interceptor.ts

Angular セキュリティ

このファイルは common/security.md を Angular 固有のコンテンツで拡張します。

XSS 防止

Angular はバインドされた値を自動的にサニタイズします。ユーザー制御の入力に対してサニタイザをバイパスしないでください。

// 誤り: サニタイゼーションをバイパス — XSS リスク
this.safeHtml = this.sanitizer.bypassSecurityTrustHtml(userInput);

// 正しい: 信頼する前に明示的にサニタイズ
this.safeHtml = this.sanitizer.sanitize(SecurityContext.HTML, userInput);
  • 文書化されレビューされた理由なしに bypassSecurityTrust* メソッドを使用しない
  • 信頼できないコンテンツに [innerHTML] を使用しない — innerText またはサニタイズパイプを使用
  • ユーザー入力に [href] をバインドしない — Angular はすべてのコンテキストで javascript: URL をブロックするわけではない
  • ユーザーデータからテンプレート文字列を構築しない

HTTP セキュリティ

HttpClient のみを使用してください — 代替手段がない場合を除き、生の fetch()XHR を使用しないでください。

// 誤り: インターセプターをバイパス(認証ヘッダー、エラーハンドリング、ログ記録)
const res = await fetch('/api/users');

// 正しい
users$ = this.http.get<User[]>('/api/users');
  • インターセプター経由で認証トークンを添付 — 個々のサービス呼び出しにハードコードしない
  • API レスポンスを型付けしてバリデーション — 境界では外部データを unknown として扱う
  • トークン、PII、または認証情報を含む可能性のある HTTP レスポンスをログに記録しない

シークレット管理

// 誤り: ソースにハードコードされたシークレット
const apiKey = 'sk-live-xxxx';

// 正しい: 環境経由で注入
import { environment } from '../environments/environment';
const apiKey = environment.apiKey;
  • environment.ts を設定の形として扱う — ソース管理されている環境ファイルに実際のシークレットを格納しない
  • CI/CD 経由で本番シークレットを注入(環境変数、シークレットマネージャー)

ルートガード

すべての認証済みまたはロール制限されたルートにはガードが必要です。UI 要素の非表示だけに頼らないでください。

{
  path: 'admin',
  canMatch: [authGuard, roleGuard('admin')],
  loadChildren: () => import('./admin/admin.routes'),
}

機密性の高いルートには canMatch を使用してください — 未認証ユーザーに対してルートモジュールの読み込み自体を防止します。

SSR セキュリティ

Angular SSR を使用する場合:

  • 意図的に公開する場合を除き、TransferState 経由でサーバーサイドの環境変数をクライアントに公開しない
  • サーバーサイドレンダリング前にすべての入力をサニタイズ — DOM ベースの XSS はサーバーサイドでも発生する可能性がある
  • サーバー上で windowdocumentlocalStorage を使用しない — isPlatformBrowser でゲートするか、DOCUMENT トークン経由で注入

コンテンツセキュリティポリシー

サーバーサイドで CSP ヘッダーを設定してください。script-srcunsafe-inline を避けてください。インラインスクリプトを使用する SSR では、Angular の CSP サポートを通じてナンスを使用してください。

エージェントサポート

  • 包括的なセキュリティ監査には security-reviewer スキルを使用