Angular9 HTTP级别漏洞
Angular 内置了一些支持来防范两个常见的 HTTP 漏洞:跨站请求伪造(XSRF)和跨站脚本包含(XSSI)。 这两个漏洞主要在服务器端防范,但是 Angular 也自带了一些辅助特性,可以让客户端的集成变得更容易。
跨站请求伪造(XSRF)
在跨站请求伪造(XSRF 或 CSFR)中,攻击者欺骗用户,让他们访问一个假冒页面(例如 "evil.com"), 该页面带有恶意代码,秘密的向你的应用程序服务器发送恶意请求(例如 "example-bank.com")。
假设用户已经在 "example-bank.com" 登录。用户打开一个邮件,点击里面的链接,在新页面中打开 "evil.com"。
该 "evil.com" 页面立刻发送恶意请求到 "example-bank.com"。这个请求可能是从用户账户转账到攻击者的账户。 与该请求一起,浏览器自动发出 "example-bank.com" 的 cookie
。
如果 "example-bank.com" 服务器缺乏 XSRF 保护,就无法辨识请求是从应用程序发来的合法请求还是从 "evil.com" 来的假请求。
为了防止这种情况,你必须确保每个用户的请求都是从你自己的应用中发出的,而不是从另一个网站发出的。 客户端和服务器必须合作来抵挡这种攻击。
常见的反 XSRF 技术是服务器随机生成一个用户认证令牌到 cookie
中。 客户端代码获取这个 cookie,并用它为接下来所有的请求添加自定义请求页头。 服务器比较收到的 cookie
值与请求页头的值,如果它们不匹配,便拒绝请求。
这个技术之所以有效,是因为所有浏览器都实现了同源策略。只有设置 cookie
的网站的代码可以访问该站的 cookie
,并为该站的请求设置自定义页头。 这就是说,只有你的应用程序可以获取这个 cookie
令牌和设置自定义页头。"evil.com" 的恶意代码不能。
Angular 的 HttpClient
对这项技术的客户端部分提供了内置的支持要了解更多信息,参见 HttpClient 部分。
可到 "开放式 Web 应用程序安全项目 (OWASP) " 深入了解 CSRF,参见 Cross-Site Request Forgery (CSRF) 和 Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet。
跨站脚本包含(XSSI)
跨站脚本包含,也被称为 Json 漏洞,它可以允许一个攻击者的网站从 JSON API 读取数据。这种攻击发生在老的浏览器上, 它重写原生 JavaScript 对象的构造函数,然后使用 <script>
标签包含一个 API 的 URL。
只有在返回的 JSON 能像 JavaScript 一样可以被执行时,这种攻击才会生效。所以服务端会约定给所有 JSON 响应体加上前缀 )]}
,\n
,来把它们标记为不可执行的, 以防范这种攻击。
Angular 的 HttpClient 库会识别这种约定,并在进一步解析之前,自动把字符串 )]}
,\n
从所有响应中去掉。
更多建议: