CSRF Token 是不是最好不要写入公开页面?

2016-06-30 15:56:48 +08:00
 gulu
  1. 建站的时候我在首页写入了 csrf_token ;
  2. 在没登陆的时候进入首页查看网页源码获得 token ;
  3. 登陆网站;
  4. 本地新建一个 html :
<form action="http://localhost:8000/somt/path" method="POST">
    <input name="name" type="text">
    <input type="text" name="csrf_token">
    <input type="submit">
    
</form>

  1. 浏览器打开这个 html 文档, csrf_token 那一栏填入刚才获得的 token
  2. 提交 post ,通过了。

这样的话,是不是只有有一个从网站上获取的 cstf_token 就能随时用? 不管获取 token 时用户的登陆状态?

4888 次点击
所在节点    信息安全
13 条回复
feixchow
2016-06-30 16:09:50 +08:00
csrf_token 不应该是单次有效吗?
manhere
2016-06-30 16:10:34 +08:00
如果站外提交有效,说明你的 csrf_token 逻辑有问题。
xujif
2016-06-30 16:11:47 +08:00
csrf_token 是用来防止 xss 的,不是用来防止分析提交的。
justfindu
2016-06-30 16:11:55 +08:00
你这个情况不就是只能 post 一次么? 而且每次模拟 post 还需要再打开再来一次, 数据的话你后台肯定也会过滤检查的
完全不是问题吧
est
2016-06-30 16:47:39 +08:00
csrf token 是用来防止 csrf 的。谢谢。
chairuosen
2016-06-30 16:52:27 +08:00
随时用 ,用一次
nigelvon
2016-06-30 17:05:41 +08:00
所谓公开页面就是指不登录也能看到的页面吧,这样的话提交的时候并不需要理会用户的登录状态吧?这种 csrf 并没什么意义,别人后台可以很容易 get 到你的 token 。
virusdefender
2016-06-30 17:07:12 +08:00
csrf token 只要不能被跨域读取就好了
gulu
2016-06-30 17:13:42 +08:00
@feixchow 在我这个测试中可以用很多次
@manhere 我用的 flask-wtf ,好像只要 post 的数据中带有从网站上获取的 csrf_toke, post 就能被接受。
@xujif 嗯这是我表述的问题。不过在我这个情况中,攻击者好像可以先自己访问我的首页,获取 csrf_token , 然后再诱导我的用户点击他伪装的链接,同时发送他刚才获取的 token , 我的网站不能识别出来。

@chairuosen 似乎每次刷新页面都会得到新的 token , 但是不知道为什么旧的还是可以用来提交。
gulu
2016-06-30 17:33:58 +08:00
@nigelvon
@virusdefender
谢谢大家,我感觉可能是我测试的方法有问题。
我登陆后获取的 token , 在注销后也能用(临时取消了权限要求),而且能用很多次,但是只能在同一个浏览器中用,换个浏览器就会 400 错误。
seki
2016-06-30 17:36:15 +08:00
旧的用来提交也是正常的,比如你打开了两个同地址页面,然后就旧的页面就失效了,这不是很囧
你清一下 cookies 再试
otakustay
2016-06-30 17:53:21 +08:00
我看到楼上有一堆乱来的- -

1. CSRF Token 用来防 CSRF ,和 XSS 没关系,你首先得知道 CSRF 是什么
2. CSRF Token 可以单次有效,但没有什么特别收益,同时也可能造成一些混乱,因此 Session 期间有效是比较合适的一种做法
3. 只要跨域读不到 CSRF 则 CSRF Token 就能起到作用,因此放在页面里没关系
gulu
2016-06-30 18:12:09 +08:00
@seki 谢谢!我理解旧的为什么可以提交了!

@otakustay 我想送你十个感谢! 我已经没有任何疑问了。

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

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

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

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

© 2021 V2EX