浏览器会自动提供身份验证机制(最常见的方式是使用Cookie)
该操作正在您的后端上改变状态
这个问题已经被问过很多次了,但是经过数小时的搜索,我仍然没有明确的答案。
https://github.com/pillarjs/understanding-csrf之类的项目甚至都已经被放弃,并且像this一样,多年来没有回答新的问题。
假设我有:
back.domain.com
和[上的后端front.domain.com
上的前端。我的后端是一个简单的nodejs应用程序,具有这些其余端点:
POST /login
:
{"username": "myname", "password": "mypass"}
GET /players
:
POST /player/1
:
我的前端应用程序具有:
[/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来编辑播放器,因为我已经登录(并且我仍然有会话Cookie)在我的domain.com
上。
首次登录X-CSRF-Token
时是否需要CSRF保护(例如back.domain.com/login
标头?
X-CSRF-Token
授权标头的CSRF令牌。我在https://fractalideas.com/blog/making-react-and-django-play-well-together-single-page-app-model上阅读,他们正在为此在后端上创建专用端点,并且they explain这不是安全漏洞。
您怎么看?
我知道这个问题已经被问过很多次了,但是经过数小时的搜索,我仍然没有明确的答案。甚至像https://github.com/pillarjs/understanding -...这样的项目
浏览器会自动提供身份验证机制(最常见的方式是使用Cookie)
该操作正在您的后端上改变状态
GET /players/
:get不是状态更改操作。不需要CSRF保护。POST /player/1/
:cookie提供的身份验证;职位正在改变。需要CSRF保护!POST /login/
:浏览器没有自动提供认证信息;它来自用户有意输入并提交的数据。不需要CSRF保护。
[您会发现其他流派-this other stack overflow post表示有可能侵犯隐私权,但我认为所描述的方法有点轻信。无论如何,您都是对的-如果前端和后端由完全不同的服务器提供服务,则在用户登录之前,您的前端将没有CSRF令牌。