Spring Boot REST API结合React架构下是否需启用CSRF Token?
CSRF Token 相关问题解答
1. 登录/注册表单需要启用CSRF Token吗?
需要。登录、注册这类操作会直接创建或变更用户的认证状态,属于敏感的状态变更操作。攻击者可以构造恶意页面,诱导用户访问后自动提交伪造的登录/注册请求,利用浏览器的自动提交特性发起CSRF攻击——比如强制用户登录攻击者预设的账号,或者在用户不知情的情况下完成注册操作。因此,登录/注册表单必须启用CSRF Token防护。
2. Access Token存内存、Refresh Token存HttpOnly Cookie的场景需要CSRF Token吗?
要分场景判断:
- 使用内存中Access Token的接口:不需要。Access Token存在前端内存里,攻击者无法通过跨域手段获取到,且跨域请求中无法伪造
Authorization请求头(受浏览器同源策略限制),这类接口不存在CSRF攻击风险。 - 刷新Token的接口:必须启用CSRF Token。Refresh Token存在HttpOnly Cookie中,浏览器会自动在请求时携带这个Cookie。攻击者可以构造恶意页面,诱导已登录用户访问,此时浏览器会自动携带用户的Refresh Token发起刷新请求,进而获取新的Access Token和Refresh Token,完全符合CSRF攻击的场景,所以这个接口必须加CSRF防护。
3. 已配置CORS仅允许localhost:3000,还需要CSRF Token吗?
需要。CORS和CSRF防护是完全不同的机制,不能互相替代:
- CORS的作用是限制哪些域名可以发起跨域请求,以及能否读取响应内容,但它无法阻止浏览器自动发送带有Cookie的请求。比如攻击者构造的恶意页面发起刷新Token的请求,浏览器会自动携带用户的Refresh Token Cookie,即使CORS配置不允许该域名的请求,请求依然会到达后端并被处理——只是前端无法读取响应结果,但攻击已经完成了。
- 因此,即使配置了严格的CORS规则,涉及到Cookie自动携带的敏感操作(比如刷新Token、登录),依然需要启用CSRF Token防护。
内容的提问来源于stack exchange,提问作者Study Planet
相关产品推荐
相关产品推荐

