XSS и CSRF защита

Angular предоставляет встроенные механизмы защиты от XSS (Cross-Site Scripting) и CSRF (Cross-Site Request Forgery), что позволяет минимизировать риск атак на клиентскую и серверную часть приложения.

Защита от XSS

  1. Автоматическое экранирование данных Angular автоматически экранирует динамические данные, вставляемые через интерполяцию ({{ value }}), предотвращая внедрение скриптов.

    <div>{{ userInput }}</div> <!-- Любой HTML или JS будет безопасно экранирован -->
  2. Санитизация HTML Для вставки HTML используется сервис DomSanitizer, который позволяет явно доверять безопасному контенту.

    import { DomSanitizer } from '@angular/platform-browser';
    
    constructor(private sanitizer: DomSanitizer) {}
    
    getSafeHtml(html: string) {
      return this.sanitizer.bypassSecurityTrustHtml(html);
    }
  3. Сброс стилей и URL Для безопасной работы с CSS, URL и ресурсами Angular предоставляет методы:

    • bypassSecurityTrustStyle()
    • bypassSecurityTrustUrl()
    • bypassSecurityTrustResourceUrl()

Защита от CSRF

  1. Использование токенов CSRF Angular автоматически интегрируется с backend, который поддерживает CSRF-токены. Токен передается через заголовок X-XSRF-TOKEN.

  2. HttpClient и XSRF Модуль HttpClient автоматически добавляет CSRF-токен к запросам типа POST, PUT, DELETE, PATCH, если сервер присылает cookie с токеном.

    this.http.post('/api/data', body).subscribe();
  3. Конфигурация сервера Сервер должен выдавать токен в cookie с флагами HttpOnly и SameSite для защиты от межсайтовых атак. Angular доверяет этому токену и добавляет его в заголовок.

Рекомендации по безопасности

  • Никогда не отключать автоматическое экранирование интерполяции без строгой необходимости.
  • Использовать DomSanitizer только для проверенного контента.
  • Проверять CSRF-токены на стороне сервера для всех изменяющих запросов.
  • Обновлять Angular и зависимости безопасности, чтобы использовать последние патчи защиты.

Эти механизмы создают надежную основу для защиты приложений от распространённых веб-уязвимостей, сохраняя при этом гибкость и производительность интерфейсов.