mcpField
A
angular-security

angular-security

github.com/oguzhan18セキュリティ7210 回インストール30 週間前に更新
リポジトリ

angular-security について

Angular 開発者向けに、XSS、CSRF、CSP、入力検証を扱うセキュリティスキルです。Trusted Types、DomSanitizer、HttpClient、ルートガードについても解説します。

主な機能

  1. 01DomSanitizer による HTML の安全な処理
  2. 02HttpClient の CSRF 設定ガイダンス
  3. 03Trusted Types と CSP のガイド
  4. 04動的なテンプレート評価の回避
  5. 05ルートガードと入力検証

活用シーン

  1. 01ユーザー提供 HTML の安全な表示
  2. 02HTTP リクエストへの CSRF 対策の設定
  3. 03Angular アプリのコンテンツセキュリティポリシー強化
  4. 04保護されたルートへの未認証アクセス制限

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-security

インストール後、Claude Code で/angular-securityを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/discussions/
_INDEX.md
references/docs/
_INDEX.md
references/issues/
_INDEX.md
references/releases/
_INDEX.md

詳細

Angular セキュリティ

バージョン: Angular 21(2025) タグ: セキュリティ、XSS、CSRF、CSP、サニタイズ

参考資料: セキュリティガイド • DomSanitizer

API の変更点

このセクションでは、最近のバージョン固有の API の変更点について説明します。

  • 新機能:Trusted Types — Angular は CSP 向けに Trusted Types をサポートします

  • 新機能:HttpClient の CSRF — CookieXSRFStrategy による組み込みの CSRF 保護

  • 新機能:untrustedEvents を使用する provideZoneChangeDetection — Zone.js のイベントフィルタリング

  • 新機能:afterNextRender のセキュリティ — レンダリング後にコードを安全に実行します

ベストプラクティス

  • 安全な HTML には DomSanitizer を使用します
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';

constructor(private sanitizer: DomSanitizer) {}

getSafeHtml(html: string): SafeHtml {
  return this.sanitizer.bypassSecurityTrustHtml(html);
}
  • bypassSecurityTrust メソッドは慎重に使用します
// Only use when content is trusted
this.safeUrl = this.sanitizer.bypassSecurityTrustUrl(userInput);
this.safeScript = this.sanitizer.bypassSecurityTrustScript(script);
this.safeStyle = this.sanitizer.bypassSecurityTrustStyle(style);
this.safeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);
  • CSRF 保護には HttpClient を使用します
// Automatically uses XSRF-TOKEN cookie
http.get('/api/data').subscribe();

// Configure CSRF
provideHttpClient(
  withXsrfConfiguration({
    cookieName: 'XSRF-TOKEN',
    headerName: 'X-XSRF-TOKEN'
  })
)
  • サニタイズを適用して innerHTML を使用します
@Component({
  template: `<div [innerHTML]="safeContent"></div>`
})
export class MyComponent {
  // Angular sanitizes automatically
  safeContent = '<p>Safe content</p>';
}
  • 動的なテンプレート評価は避けます
// ❌ Dangerous
eval(userInput);

// ✅ Safe - use Angular's binding
{{ userInput }}
  • Content Security Policy を使用します
<meta http-equiv="Content-Security-Policy" 
      content="default-src 'self'; script-src 'self'">
  • Trusted Types を使用します
import { provideTrustedTypes } from '@angular/core';

export const appConfig: ApplicationConfig = {
  providers: [
    provideTrustedTypes()
  ]
};
  • ユーザー入力を検証します
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'escapeHtml' })
export class EscapeHtmlPipe implements PipeTransform {
  transform(value: string): string {
    return value
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;');
  }
}
  • 認証には HttpClient インターセプターを使用します
export const authInterceptor: HttpInterceptorFn = (req, next) => {
  const token = inject(AuthService).getToken();
  
  if (token) {
    const authReq = req.clone({
      setHeaders: { Authorization: `Bearer ${token}` }
    });
    return next(authReq);
  }
  return next(req);
};
  • ルートの保護にはルーターガードを使用します
export const authGuard: CanActivateFn = () => {
  const auth = inject(AuthService);
  const router = inject(Router);
  
  if (auth.isAuthenticated()) {
    return true;
  }
  return router.createUrlTree(['/login']);
};

コメント