Cross-Site Scripting (XSS) - это уязвимость, позволяющая злоумышленнику внедрять вредоносные скрипты в веб-страницы, которые просматривают другие пользователи.
Angular предоставляет несколько уровней защиты:
Angular автоматически экранирует все данные в шаблонах:
<p>{{ userControlledValue }}</p> <!-- Безопасно -->
Angular использует DomSanitizer для очистки значений:
import { DomSanitizer } from '@angular/platform-browser';
constructor(private sanitizer: DomSanitizer) {}
safeHtml = this.sanitizer.bypassSecurityTrustHtml(untrustedValue);
Всегда предпочитайте:
<!-- Безопасно -->
<div [textContent]="userInput"></div>
<!-- Опасно -->
<div [innerHTML]="userInput"></div>
ng build --prod
)Добавьте в index.html
:
<meta http-equiv="Content-Security-Policy"
content="default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data:;">
Настройте сервер для отправки:
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Всегда валидируйте и санируйте данные:
import { Injectable } from '@angular/core';
@Injectable()
export class SanitizationService {
sanitizeInput(input: string): string {
return input.replace(/<script.*?>.*?<\/script>/gi, '');
}
}
<!-- Опасно! -->
<div [innerHTML]="untrustedHtml"></div>
// Опасно!
this.compiler.compileModuleAndAllComponentsAsync(moduleType)
// Опасно без веской причины!
this.sanitizer.bypassSecurityTrustScript(untrustedCode);
<script nonce="r4nd0m">...</script>
В CSP:
script-src 'self' 'nonce-r4nd0m'
Используйте Angular HttpClient с CSRF-токенами:
import { HttpClientXsrfModule } from '@angular/common/http';
@NgModule({
imports: [
HttpClientXsrfModule.withOptions({
cookieName: 'XSRF-TOKEN',
headerName: 'X-XSRF-TOKEN'
})
]
})
Проверяйте уязвимости:
npm audit
ng update
Тестирование на уязвимости:
<script>alert(1)</script>
Логирование CSP нарушений:
Content-Security-Policy-Report-Only: ...; report-uri /csp-report
Angular предоставляет мощные встроенные механизмы защиты от XSS, но их недостаточно. Комбинируйте автоматическое экранирование, CSP, санитизацию данных и безопасные практики разработки для комплексной защиты. Всегда валидируйте пользовательский ввод и минимизируйте использование опасных методов.