如果用 localstorage 替代 cookie 是不是就不存在 csrf 问题了?

2023-03-09 00:30:53 +08:00
 yodhcn
如果用 localstorage 替代 cookie 是不是就不存在 csrf 问题了?

cookie 随请求自动携带的特性,是不是 csrf 问题的主要原因?

localstorage 存储 sessionId + 请求时通过 header 携带 sessionId 的这种方式,与传统的通过 cookie 存储与携带 sessionId 的方式相比,哪种方式更好?
2653 次点击
所在节点    程序员
12 条回复
lianyue
2023-03-09 00:48:53 +08:00
csrf 你不如需要安全操作的都是用 PUT PATCH DELETE 方法 HEAD GET POST 不允许用于安全的操作 更方便
Puteulanus
2023-03-09 01:34:53 +08:00
请求时通过 header 携带 sessionId ,意思是请求的时候用 JS 手动操作?那 sessionId 就必须在 JS 可操作的范围内,不像 HttpOnly 的 cookie ,那在 XSS 发生的时候会更危险
akira
2023-03-09 05:55:52 +08:00
有区别么,只要识别信息带过去了,就都一样
beginor
2023-03-09 08:01:08 +08:00
一个是浏览器行为,一个是 js 行为,不一样的。如果是 cookie 的话,浏览器自动按照地址发送 cookie ,而 local storage 里面的东西只能 js 主动发送,各有利弊
Al0rid4l
2023-03-09 08:16:04 +08:00
哪怕是 httponly 的 cookie, XSS 也是要防的, 还得防 CSRF, 存 Localstorage 好歹我只要防 XSS 就行, 我选 Localstorage, 当然如果要偷懒那就 cookie
xqk111
2023-03-09 09:06:38 +08:00
CSRF ,一般都是二次校验,苹果啊,支付啊,都是二次校验,加强安全性
nothingistrue
2023-03-09 09:30:03 +08:00
如果你的后台有分布式会话跟踪的需要,已经把 Session 改造成了 sessionId-redis 存储的形式,那么前端把 sessionId 的携带方式改造一下就没有问题。否则,就不要干这种杀鸡用牛刀的事,防 CSRF 很简单,不需要修改通用规范这么大的成本。
coolzjy
2023-03-09 09:44:32 +08:00
目前来看使用 JavaScript 手工管理凭据信息是更主流一些的方式:一来确实可以预防 CSRF ,更重要的是现代浏览器对于跨站 cookie 的限制越来越严格了,在跨域场景下使用 cookie 管理凭据已经基本不可行了。
dode
2023-03-09 10:27:32 +08:00
sessionId 就存在 cookie 里面的
yuezk
2023-03-09 10:28:57 +08:00
CSRF 的 token 和 sessionId 是两个东西,CSRF token 不需要长时间保存,最佳实践就是以 JS 变量或者隐藏字段的方式输出在页面中。
yodhcn
2023-03-09 11:25:36 +08:00
@nothingistrue 确实如此,虽然 spring-session 支持 HttpSessionStrategy ,但是又没有分布式的需求,引入 spring-session 就有点多余。

但如果是前后端分离,比如前端在 a.com ,后端在 b.com ,这种情况又该怎样预防 CSRF ?
yodhcn
2023-03-09 11:47:34 +08:00
@nothingistrue 如果你说的是 spring-session ,它也可以用 MapSessionRepository 存储 session

https://stackoverflow.com/questions/28384907/can-i-enable-just-spring-session-header-authentication

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/922433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX