csrf简述

来源:互联网 发布:php javascript 交互 编辑:程序博客网 时间:2024/05/19 14:39

网络安全中的常见问题之一,cross site request forgery(直译为:跨域请求伪造),这是个什么问题呢?网上扯的可以很多,但是其实可以用一个简单的例子说明白:

比如你要操作一个网站背后的资源,我们一般是发个http post请求对吧?比如http://example.com/api/updatepassword, post方法, post body为newpassword: 123456, 假设我们用这个post请求修改密码,如果有黑客要伪造这个过程,他会怎么办?首先这个API本身他很容易获得吧?稍微懂一点浏览器操作的,打开调试窗口看下网络请求就知道了。知道了api和请求格式,下一个要攻克的就是认证了,在最原始的情况下,认证是通过一个叫cookie的东西保存在用户的浏览器上的,那么假设用户已经登陆了网站,就会有这个有效的cookie,如果他打开了黑客发给他的钓鱼页面或者其他的什么形式的链接(这个链接就是用来发送之前黑客在网络tab中获知的请求api的),就会结合已经登陆的cookie,混过认证过程,于是整个黑的过程就完成了。简单吧?


怎么防止呢?理论上这样能被黑就是因为这个认证过程(用单一的 cookie)有漏洞,所以防范的方法也是从这个认证过程入手。先从高层来看,如果能直接禁掉其他域发来的post请求,不就不存在这个问题了吗?比如你的网站叫http://www.example.com的域名,黑客给你发黑的链接是http://www.wocao.com, 然后只要服务器看到这个post请求是从wocao.com发过来的,就拒掉,管你什么cookie不cookie的,这样不就安全了吗?没错,就是这样的思路,那怎么实现呢?怎么知道请求从哪发来的呢?这就是技术细节的问题了,我也不是很清楚,了解的一个大概方法之一就是在请求中除了cookie外再加一个用户唯一的随机加密串,这样就不能单凭cookie就开黑了。


具体在工程实现上,spring security做了很方便的工程实现,用着挺好

原创粉丝点击