我知道
这个问题已经被问过很多次了,但是经过几个小时的搜索,我仍然没有明确的答案。
甚至像https://github.com/pillarjs/understanding-csrf这样的项目也被放弃了,多年来没有像这样回答新的问题和疑虑。
问题
假设我有:
- 一个后端
back.domain.com和 - 上的前端
front.domain.com。
我的后端是一个简单的 nodejs 应用程序,具有以下其余端点:
POST /login:- 接受 JSON 正文,如:
{"username": "myname", "password": "mypass"} - 验证凭据
- 如果OK给出 200 并创建一个带有会话的 cookie
- 如果不给出 401
- 接受 JSON 正文,如:
GET /players:- 检查 cookie 中的会话
- 如果OK给出 200 {"players": "[...]"}
- 如果不给出 401
POST /player/1:- 检查 cookie 中的会话
- 如果OK给出 200 并编辑播放器
- 如果不给出 401
我的前端应用程序有:
/login带有表单(带有username和password字段)的页面,用于发出POST请求back.domain.com/login/players哪个请求GET请求back.domain.com/players发出
POST请求的按钮back.domain.com/player/1
问题
在这种情况下我需要 CSRF 保护吗?
我认为是的,我需要,因为攻击者可以发出请求并使用我
back.domain.com/player/1的malicious.site.com会话 cookie 来编辑播放器,因为我在我的domain.com.X-CSRF-Token我第一次登录时是否需要 CSRF 保护(例如标题)back.domain.com/login?- 在这种情况下,我的浏览器中仍然没有任何会话 cookie。
- 而且我也不知道在哪里可以获得我的 CSRF 令牌作为
X-CSRF-Token授权标头。
我在https://fractalideas.com/blog/making-react-and-django-play-well-together-single-page-app-model上阅读,他们为此在后端创建了一个专用端点,他们解释说不是安全漏洞。
你有什么想法?