关于Token抵御CSRF攻击的疑问
背景
大家好,最近在看的关于抵御CSRF攻击的方法中,绝大多数都提及了加入token字段的方式。
但是这里有些疑问想请教一下,在查CSRF相关的文章中看到了这样一段话。
基于 Token 的身份验证方法
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
问题
1.上面这段话中,跨站伪造请求最开始窃取了目标网站的cookie发送了请求,那么如果我们将token放在了cookie中,不还是被窃取到了,到服务器的时候也是一样的拿到cookie中的token然后通过了认证么。
2.如果放在了页面表单中的hidden字段中,那攻击者是不是可以通过下载页面的源码找到隐藏字段并再次进行伪造请求呢。
3.token的本质还是在客户端加入了验证的信息,并且登录之后存在一段时间而不是一次一个,那么通过抓包的方式是不是也能窃取到token呢。
望赐教,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
以下回复题主的评论:
<input type='hidden' name='token' value='xxxxxx'>
,提交到服务器之后,服务器再校验表单提交的token和cookie中的token是否一致,一致则校验通过,不一致则很可能是CSRF攻击者的伪造请求。CSRF的确可以把Cookie提交到服务器,但是伪造不了表单的token,因为他拿不到Cookie的内容,那就通过不了校验。