我是否需要对/ login端点进行CSRF保护?

问题描述 投票:2回答:1

我知道

这个问题已经被问过很多次了,但是经过数小时的搜索,我仍然没有明确的答案。

https://github.com/pillarjs/understanding-csrf之类的项目甚至都已经被放弃,并且像this一样,多年来没有回答新的问题。

问题

假设我有:

  • back.domain.com和[上的后端
  • front.domain.com上的前端。
  • 我的后端是一个简单的nodejs应用程序,具有这些其余端点:

  1. POST /login

    1. 接受JSON正文,例如:{"username": "myname", "password": "mypass"}
    2. 验证凭据
    3. 如果确定
    4. 给出200并创建带有会话的cookie,则>]
    5. 如果NOT给出401
  2. GET /players

  1. 检查Cookie中的会话
  2. 如果确定给出200个{“玩家”:“ [...]”}
  3. 如果NOT给出401
  4. POST /player/1

  1. 检查Cookie中的会话
  2. 如果确定给出200并编辑播放器
  3. 如果NOT给出401

我的前端应用程序具有:

  1. [/login页面的格式(带有usernamepassword字段),用于向POST发出back.domain.com/login请求

  • [/playersGET请求back.domain.com/players请求

  • POST发出back.domain.com/player/1请求的按钮>

  • 问题
    1. 在这种情况下我需要CSRF保护吗?

    我认为是,我需要,因为攻击者可以从back.domain.com/player/1malicious.site.com发出请求,并使用我的会话Cookie来编辑播放器,因为我已经登录(并且我仍然有会话Cookie)在我的domain.com上。

  • 首次登录X-CSRF-Token时是否需要CSRF保护(例如back.domain.com/login标头?

    1. 在这种情况下,我的浏览器中仍然没有任何会话cookie。
    2. 而且我也不知道从哪里获得X-CSRF-Token授权标头的CSRF令牌。
    3. 我在https://fractalideas.com/blog/making-react-and-django-play-well-together-single-page-app-model上阅读,他们正在为此在后端上创建专用端点,并且they explain这不是安全漏洞。

  • 您怎么看?

    我知道这个问题已经被问过很多次了,但是经过数小时的搜索,我仍然没有明确的答案。甚至像https://github.com/pillarjs/understanding -...这样的项目

    您是正确的。
    您必须同时满足以下两个条件时才需要CSRF保护:

    浏览器会自动提供身份验证机制(最常见的方式是使用Cookie)

    该操作正在您的后端上改变状态

      您的三个端点中,只有一个同时满足这两个条件。
    • GET /players/:get不是状态更改操作。不需要CSRF保护。
    • POST /player/1/:cookie提供的身份验证;职位正在改变。需要CSRF保护!
    • POST /login/:浏览器没有自动提供认证信息;它来自用户有意输入并提交的数据。不需要CSRF保护。

    [您会发现其他流派-this other stack overflow post表示有可能侵犯隐私权,但我认为所描述的方法有点轻信。无论如何,您都是对的-如果前端和后端由完全不同的服务器提供服务,则在用户登录之前,您的前端将没有CSRF令牌。

    rest authentication csrf csrf-token
    1个回答
    0
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.