使用token机制防止CSRF攻击的一个疑问

wx3046 2012-07-01 11:10:30
我的页面中所有请求都是通过jquery的一个插件jquery.templateforms.js来实现的,全部使用$.post提交数据。

目前有一个需求是需要能够防止CSRF攻击,在网上看来很多资料,一般有三种方式
1、http reference头判断请求是否来自本地域
2、使用一次性令牌token,每一个post请求都携带一个一次性token,后台进行校验
3、使用图片验证码

第一种比较容易伪造,第二种是通用做法,第三种最安全。
但是由于页面是客户提供的,不能更改,所以我采用第2种方式来实现,在每一个$.post之前,我都先发出一个post请求去获取token,获取成功后,把token附带到要提交的数据中一起提交。获取token的post请求不需要用户登录就可以发起,因为登录的时候也要获取token,而这时候是未登录状态的。

但是我这种做法不能防止CSRF攻击,因为当一个用户登录系统后,在浏览器种打开另外一个选项卡,也是登录状态,因为cookie种携带这session id,所以可以构造js脚本来发起获取token的请求,接着再post非法数据。但是这个时候后台检测不出来。
网上搜索了很多资料,我没有看明白token这个机制是如何防止CSRF攻击的?

我如何做才能使web后台识别出获取token不是有本域发出的?

因为WebServer是自己实现的,所以一切可行的方法都可以



...全文
1446 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
LiZnZ 2012-07-16
  • 打赏
  • 举报
回复
使用token防止CSRF,要保证token不会泄露,一般的做法是在内存中保存一个唯一的token,有提交操作的表单页面是使用CGI,PHP,JSP等生成的,保证只有你的页面才能通过内存取到这个token,这样跨站的网页是无法伪造的。
按你说的,页面无法改到,就提供了一个接口给js来获取token,还不带登录态,就相当于这个token泄露了。不知道我说的清楚不,有疑问大家再讨论。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧