【问题标题】:Handling Angular 2 csrf for cross origins处理跨域的 Angular 2 csrf
【发布时间】:2020-03-26 11:29:20
【问题描述】:

下面是我们应用的架构。

  1. Web 界面 [客户端] 是独立的 Angular 2 应用程序 [domain.com]
  2. 持有客户端凭据的[proxy][web interface secret] [domain2.com]
  3. [API] 本身具有身份验证服务器 [domain3.com]

申请流程如下:

  1. 用户将他的凭据用户名+密码输入到[客户端]登录页面,然后将其发送到[代理]
  2. 然后代理会将凭据附加到请求并将其转发到 [API]
  3. [API]将能够在验证用户凭据后获取访问+刷新令牌并将其返回给[代理]
  4. [proxy] 返回响应以及标头 [Set-Cookie:XSRF-TOKEN]
  5. [client] 应该能够读取 [XSRF-TOKEN] 并将其与每个请求一起发送为 [X-XSRF-TOKEN]标题。

除了第 5 步之外,身份验证服务器、代理和客户端上的一切都按预期工作:

Angular 应该能够根据文档自动处理此问题

{ provide: XSRFStrategy, useValue: new CookieXSRFStrategy('XSRF-TOKEN', 'X-CSRF-TOKEN')}

angular 将能够获取 [XSRF-TOKEN] cookie 的值并在每个请求中创建 [X-CSRF-TOKEN] 标头我们通过应用程序制作的。

虽然 & 当我使用不同的来源构建架构时,angular 无法从另一个来源读取 cookie。

我面临的这种方法的问题是,由于服务器位于不同的域中,我无法通过 XSRFStrategy 提供程序读取 cookie。有没有办法读取那个 cookie 的值?

如果不是,那么当前架构是错误的,我需要在同一域中构建 [client][proxy],我避免使用这种方法,因为我需要将表示层与任何后端代码分开。

那么,我的问题是如何针对这种情况实施 csrf 保护?

【问题讨论】:

    标签: angular laravel cross-domain csrf


    【解决方案1】:

    在您的端口中,您提到了“访问+刷新令牌”,这听起来像是您正在使用 OAuth。在跨域场景中,CSRF 通常根本不是问题。如果您的客户端需要发送任何类型的 HTTP Header 进行身份验证,您可以安全地禁用 CSRF。

    CSRF 攻击会使您的浏览器发送为 [API] 域存储的 cookie,并且通过一些黑客攻击,攻击者还可能发送“X-Requested-With: XMLHttpRequest”。但是如果你的 API 还需要一个“Authorization: Bearer ...”令牌,你可以放弃整个 CSRF 的麻烦。

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 2018-01-07
      • 2020-01-06
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多