谈谈CSRF漏洞
Posted Java资料社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈CSRF漏洞相关的知识,希望对你有一定的参考价值。
优质文章,第一时间送达
作为一个开发者并在web架构为主流的时代,多多少少听过看过不少网站攻击事件,比如某网站数据遭黑客攻击造成数据泄露等等,这些事件的发生往往都是因我们开发者某些疏忽或者测试不严谨而留下的漏洞,让某些人有了可乘之机。
文本主要了解一下在web端常见的一种漏洞:CSRF
什么是CSRF ?
CSRF (Cross-site request forger) 的全称是“跨站请求伪造”,属于跨站攻击——不攻击服务器端而攻击正常访问网站的用户,但它们的攻击类型是不同维度上的分 类。CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
CSRF原理
用户A访问B网站,输入账号密码登录成功后在该网站产生了Cookie信息返回给了浏览器,然后用户在未退出该B网站之前或者Cookie未过期之前访问了某危险网站,危险网站中执行了某恶意代码发出访问B网站请求,那么该请求就会附带的登录者Cookie信息以登陆者的身份进行操作,B网站并不知道该请求该危险网站所发起的。
CSRF实例场景
比如在某银行网站,有这么一个转账接口,小明转账1000元给小龙
www.bank.com/transfer?toUser=xiaolong&money=1000
这个请求发起后,正常的流程服务器首先先会验证该请求session是否合法,并验证该用户是否已登录已通过安全认证,然后对xiaolong用户检测是否存在等等再确定转账操作。
然而攻击者也有该银行账户,学习了CSRF漏洞之后决定攻击小明,将小明账户的钱全部转到自己账户中,如果按照上面接口操作直接将转账人改为自己可不可行呢,结果是不行的,因为攻击者当前并没有登录小明的账号,浏览器中Cookie也没有存储小明账号的信息,所以这样是行不通的,于是攻击者自己写了一个网站,网站中为下列html代码
<img src="www.bank.com/transfer?toUser=heike&money=1000" />
CSRF如何防御
1.通过验证HTTP Referer字段信息是否合法,判断该请求来源是否为本站,(缺点:在版本比较低的浏览器中,Referer可以被伪造)
3.将token加入在HTTP请求头自定义属性中,这种方式跟上种基本一致,只是把token参数通过请求头的自定义属性存储传输到后端进行验证(缺点:有局限性, 只能在ajax异步请求使用)
以上是关于谈谈CSRF漏洞的主要内容,如果未能解决你的问题,请参考以下文章