请问为什么 token 能抵御 csrf?

2020-03-18 14:22:19 +08:00
 yaphets666

如果我冒用 token 用 postman 发送一个请求 不是一样可以成功吗? 但是实际上我测试了一个网站是不可以的. 这个网站还很有趣的返回了成功的提示消息

5981 次点击
所在节点    问与答
31 条回复
CloudMx
2020-03-18 15:23:12 +08:00
@CloudMx 我把大家常说的这个 Token 设置为纯数字也是一样的道理,不在意是什么值,只在意在使用一次或者短时间内使用范围,你猜不出来。
b821025551b
2020-03-18 15:27:51 +08:00
从你的各种回复来看还是没理解什么是 csrf。
首先,有 csrf 的前提是有个有效的 cookie,攻击者通过伪造 url 并诱导被攻击者去点击。
整个过程攻击者不需要获取到被攻击者的 cookie。
防范 csrf 的 token 原理就是验证这次请求的 url 是否是官方下发的,攻击者伪造的 url 伪造不出来正确的 token。
另外,你说的那种鉴权 token 等同于 cookie,但是没有 token 就没有 csrf,获取到你说的那个鉴权 token/cookie,不属于 csrf 范畴。
murmur
2020-03-18 15:29:29 +08:00
@yaphets666 那是反爬需要解决的
yaphets666
2020-03-18 15:38:22 +08:00
@CloudMx 哦大佬 我明白了 就是说如果我通过其他途径,比如说偷看别人电脑 获取了这个值 也是可以成功访问的? 但这就不属于 CSRF 范畴了对吧
oott123
2020-03-18 15:38:31 +08:00
CSRF 是用来防止你冒用别人的 cookies 的,不是用来防止你用你自己的
CloudMx
2020-03-18 15:57:35 +08:00
@yaphets666 你单单偷一个 Anti CSRF TOKEN 来,然后还能用的话,你就又可以玩 CSRF 攻击了(没有其他的防御措施)。
DDounx
2020-03-18 17:11:32 +08:00
我的认知里 CSRF Token 主要是用来判断提交的数据属否来源于这个网站的表单,所以是为了溯源用的。
hshpy
2020-03-18 17:24:15 +08:00
token 多数情况下 js 获取不到。
whoami9894
2020-03-18 18:09:53 +08:00
用 PostMan 就像你自己偷自己东西一样当然简单,实际情况里纯 CSRF 是没有办法通过 JS 获取 token 的,具体原因了解一下 SOP
wangxiaoaer
2020-03-18 18:41:11 +08:00
Csrf 是第三方网站是在已登录用户用户不知情的情况下向你的应用发送可操作后台数据的请求,比如常用的银行转帐的例子,大概原理是浏览器自动把 cookie 等发过去了。

现在我们要做的就是让这种非用户主动发起的请求失效:

1 你的应用压根没用到 cookie,那就不存在这个问题。

2 你的应用关键请求必须验证 referer 且不能为空,那么也不存在这个问题。(存疑)

2 你的应用用到了 cookie,那么后台验证就不能仅仅依赖 cookie,所以要额外加一个不通过 cookie 携带的验证参数,就是你题中说的 token 了。 至于这个 Token 怎么发送到前台就是另一个问题了:

2.1 页面返回的 HTML 中中加入隐藏参数。

2.2 放到某个不需要验证的请求的响应头中再存起来。

2.3 通过接口直接获取(存疑)

------------

浅见,请指证。
yaphets666
2020-03-20 11:44:50 +08:00

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

https://ex.noerr.eu.org/t/653870

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

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

© 2021 V2EX