flawopen.com/Безопасность Angular/Angular
Защита Angular от XSS: безопасные значения и обходные API
Angular считает значения в привязках шаблона недоверенными: интерполяция экранирует текст, а HTML- и URL-привязки проходят контекстную очистку. Опасная граница — явное доверие: bypassSecurityTrust* указывает Angular пропустить обычную очистку этого значения. Используйте API только после проверки и построения значения для точного контекста безопасности, где оно будет применено.
this.safeHtml = this.sanitizer
.bypassSecurityTrustHtml(comment);
// <div [innerHTML]="safeHtml"></div>
<div>{{ comment }}</div>
// интерполяция отображает разметку как экранированный текст
Что Angular очищает — и что очистить невозможно
Angular экранирует интерполированный текст и очищает недоверенные значения в контекстах HTML и URL. Например, [innerHTML] удаляет опасную разметку, сохраняя безопасный HTML; обычная интерполяция вообще не разбирает разметку. URL ресурса (например, источник iframe, загружающего исполняемое содержимое) нельзя очистить универсальным способом: он может указывать на произвольный код. Не передавайте контролируемые атакующим значения в bypassSecurityTrustHtml, bypassSecurityTrustUrl, bypassSecurityTrustResourceUrl или родственные API обхода: они объявляют значение безопасным для конкретного контекста и пропускают очистку. Для допустимого встраивания создавайте URL из фиксированного origin и проверенного идентификатора непосредственно перед объявлением значения доверенным.
Проверьте API обхода защиты и DOM-sink
grep -rn "bypassSecurityTrust" --include="*.ts" .Частые вопросы
Дополнительная защита с CSP и Trusted Types
Используйте Content Security Policy (CSP) и включите принудительный режим Trusted Types как дополнительную защиту вместе с безопасными привязками Angular. При вызове приложением DomSanitizer.bypassSecurityTrust* Angular требует политику Trusted Types angular#unsafe-bypass. По возможности удалите такие вызовы; если это невозможно, учтите каждое место вызова и доверяйте только значениям, проверенным для конкретного контекста.
Нет. Привязки шаблона защищены средствами фреймворка, но прямые DOM API, ElementRef и сторонние DOM-библиотеки могут их обходить. По возможности используйте привязки шаблона, отдельно проверяйте такие sink и не объявляйте ввод доверенным без проверки для точного контекста.