请问为什么 token 能抵御 csrf?

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

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

5574 次点击
所在节点    问与答
31 条回复
zzNucker
2020-03-18 14:27:47 +08:00
你都能冒用 token 了 说明你已经能够完整控制一个网站的前端了

这种情况下需要防御的不是 csrf 了

是 xss
b821025551b
2020-03-18 14:28:40 +08:00
请好好理解一下什么是 csrf
littleylv
2020-03-18 14:30:24 +08:00
请好好理解一下什么是 csrf +1
yaphets666
2020-03-18 14:36:01 +08:00
@littleylv
@b821025551b token 不是抵御 csrf 的机制之一吗? 请大佬指点
yaphets666
2020-03-18 14:44:00 +08:00
@zzNucker 可能我理解的冒用 token 理解有误,token 不是很好获取吗?
lhx2008
2020-03-18 14:49:02 +08:00
我理解 CSRF 通常是一步操作,比如说一个提交。但是加了 token 之后, 变成了两步(获取 Token + 发送 Token ),而在第三方网站要同时做到读取和发送是不太可能的。
chinafeng
2020-03-18 14:49:06 +08:00
@yaphets666 #4 去看一下 CSRF 原理,比如你现在在 V2EX,我通过脚本等方式直接在后台发了个帖子,你想想 Token 的作用
chinafeng
2020-03-18 14:50:23 +08:00
每次请求时 CSRF Token 都是不同的,你除非能控制前端,否则如何成功呢?
murmur
2020-03-18 14:52:08 +08:00
csrf 解决的是冒用 cookies 层面的问题
liuxey
2020-03-18 14:52:59 +08:00
“如果我冒用 token” 这几字就表示和 CSRF 已经没关系了

CSRF 中文名字叫:跨站请求伪造,你都能拿到 token 了,就不需要伪造,直接爆破

最近 web 基础差的人不少啊
yaphets666
2020-03-18 14:59:48 +08:00
@chinafeng 意思是 csrf 这个 token 和用来登录的 token 还不是一个东西? csrf 这个 token 是每发送一个新的请求,就在前端生成一个 token,后端验证?
yaphets666
2020-03-18 15:00:31 +08:00
@liuxey 我的意思是获取到用于登录的 token 这个 token 不是固定的吗?
chinafeng
2020-03-18 15:02:48 +08:00
@yaphets666 #11 你指的登录的 Token 是什么东西? CSRF Token 的话,你目前正在看的这个帖子就有,View Page Source 看看吧,多刷新几次页面
q8164305
2020-03-18 15:05:14 +08:00
csrf 主要防钓鱼网站的
yaphets666
2020-03-18 15:08:38 +08:00
@chinafeng 登录 token 就是用于保持登录状态的 token,是这样的,我从 github 上找到一个开源项目叫 renrenfast,前端代码是每次请求都携带登录成功时后端返回的 token 用于保持登录状态. 而 CSRF Token 是每次请求都新生成一个,次次不同,我理解的对吗?
ooh
2020-03-18 15:09:58 +08:00
你获取我的 Token 康康
yaphets666
2020-03-18 15:12:18 +08:00
@ooh 场景是这样的...我自己"偷"我自己的 token 我从浏览器直接复制过来
Telegram
2020-03-18 15:17:36 +08:00
给你大概讲一下 csrf 的例子:
比如有个网站,点赞是 get 方式请求: http://www.xxxx.com/like?id=12365
如果没有验证 token 的话,我只要随便在某个网页发个图,图片地址设置这个 url,对方只要访问这个页面,加载这个图,对方就会自动给 id 为 12365 的帖子点赞了。
如果验证 token,点赞的 get 的可能就是这种: http://www.xxxx.com/like?id=12365&token=A23F267AE65,由于每个人的 token 是变化的,你无法预先知道对方的 token,对方加载了 http://www.xxxx.com/like?id=12365,也不会成功
chinafeng
2020-03-18 15:18:08 +08:00
@yaphets666 #15 这两个 Token 不是一个东西,前者应该是程序自定义的一个令牌,CSRF 是一套规范
CloudMx
2020-03-18 15:20:14 +08:00
这里的 Token 是 Anti csrf Token,核心点就是随机值(时效性在这里相对随机特性弱很多),你是怎么猜,怎么算都算不出来的一个值,除非你借助了其他安全问题来获取这个值,而且这个值还没失效。

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

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

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

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

© 2021 V2EX