Angular 针对 XSS

Angular against XSS

我想使用 Angular 我发现了关于安全性的:https://angular.io/guide/security 只有使用 angular 才能保护您免受所有 XSS 攻击,对吗? 无论数据来自数据库还是用户输入?

TL;DR - 是的,有点。这取决于您使用的 Angular 版本。

默认不受信任

今天,Angular 对您插入到模板中的每个变量使用 sanitize 函数,除非您另有说明(使用旁路函数)。 该函数本身使用起来非常安全,它涵盖了 大多数 的上下文,包括 - HTML、Style(CSS)、hrefs(来自 javascript:例如)。 此外,Angular 将通知您(使用浏览器控制台)"sanitize" 函数所做的每项更改。

Angular 不会掩护你

使用服务器端模板创建 HTML,或在资源 URL 中使用模板注入(例如

如何解决?

有很多技术,但当今最安全和最先进的是 CSP (content-security-policy), you can create and evaluate your CSP using a tool that Google created

旧版本 Angular

中的 XSS

在 Angular (such as 1.5) 的旧版本中,存在一系列 "template injection" 漏洞,即恶意使用可以使用 {{}} 括号来注入他自己的控制输入作为 HTML。 例如,如果用户使用此模板:

    <p class="e2e-inner-html-interpolated">{{username}}</p>

他可以选择用户名 "alert(alert(document.cookie))",结果将是:

     <p class="e2e-inner-html-interpolated"><script>alert(alert(document.cookie))</script></p>

意味着他可以将 HTML 直接注入页面本身。 Angular 多年来一直试图修复它,但收效甚微(直到几个版本之前)。

尽管使用 Angular 通常可以降低 XSS 攻击的可能性,但我们不能说您完全没有风险。例如,ViewChild and ViewChildren warns you about using the ElementRef.nativeElement. They propose to use safe Renderer2 functions instead of accessing the nativeElement raw DOM functions and attributes, like innerHTML.

的文档