我知道
这个问题已经被问过很多次了,但是经过几个小时的搜索,我仍然没有明确的答案。
甚至像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上阅读,他们为此在后端创建了一个专用端点,他们解释说不是安全漏洞。
你有什么想法?