目录
- 一、什么是CSRF攻击
- 二、CSRF攻击的流程
-
三、常见的CSRF攻击
- 1、GET类型的CSRF
- 2、POST类型的CSRF
-
四、CSRF测试
-
五、预防CSRF攻击
- 5.1、验证HTTPReferer字段
- 5.2、添加token验证
- 5.3、在HTTP头中自定义属性并验证
-
总结
一、什么是CSRF攻击
CSRF攻击的全称为跨站脚本伪造,也称为One Click Attack或者Session Eiding,通常缩写为CSRF或者XSRF。CSRF通过伪装来自受信任的用户的请求来攻击受信任的网站。与XSS相比,CSRF攻击往往不太流行(因此对其进行防范的资源也是相当紧缺的)和难以防范的,所以被认为比XSS更具危险性。我们可以这么理解CSRF攻击:首先攻击者会先盗用你的身份,然后以你的名义进行某些非法操作,甚至盗走你的账户购买的商品等。CSRF攻击其值是利用web中用户身份认证验证的一个漏洞:简答的身份验证仅仅可以保证请求发自某一个用户的浏览器,却无法保证请求本身是用户资源发出的。
二、CSRF攻击的流程
CSRF攻击原理过程如下:
从上述的流程可以看出,想要达成CSRF攻击,必须达成两个基本条件。
三、常见的CSRF攻击
1、GET类型的CSRF
2、POST类型的CSRF
四、CSRF测试
检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本可以确定存在CSRF漏洞。随着对CSRF漏洞研究的不断深入,不断涌现一些专门针对CSRF漏洞进行检测的工具,比如CSRFTester,CSRF Request Builder等,以CSRF Tester工具为例,CSRF漏洞检测工具的测试原理如下:使用CSRFTester进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息(比如说更改Referer字段的信息),重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
五、预防CSRF攻击
5.1、验证HTTP Referer字段
还拿上述的银行转账的例子来说,首先我们向银行站点发出一个请求时,此时HTTP协议头部会携带Referer字段,其中包含着请求该站点的域名,此时如果我们在访问银行站点时并且向银行发出请求,此时携带的Referer就是mybank.com,如果此时我们从存在危险的网站B向银行站点发起请求,此时的Referer就是危险网站B的域名。所以我们可以通过判断Referer来进行判断是否可以执行操作。这样就会很简单的就防止了CSRF,但是任然存在一些问题,比如说我们通过检查Referer来判断域名,这种决策权在浏览器,此时如果一些浏览器对于Referer的值是可改写的,那么CSRF的攻击任然有效。还存在一些用户会禁用Referer字段,此时就会造成无法请求网站数据。
验证Referer方式总计:
优点:使用方便,开发简单,一定程度上能预防CSRF攻击
缺点:这种机制完全依托于浏览器,Referer字段容易被故意篡改,或者被禁用。
5.2、添加token验证
我们可以当用户请求时,在安全站点A中生成一个SessionId,保存在服务器端,该值可以作为token传递给客户端。客户端可以设置一个隐藏的input框,其中的值为该token,当我们进行请求时,就会将该值传入到站点A的服务器,此时在服务器端就可以进行比较生成的token和保存的token是否一样,如果一样的话,就表示是从安全站点上发出的请求,就做出具体的相应。在危险网站B就无法拿到token,所以也就无法进行正确的请求了。如果使用的是post请求,我们可以放入隐藏的input框中,如果要是get请求,则我们可以如下写法。例如https://www.myBank.com?token=XXXXX。那么一个网站中存在很多请求,此时我们如果每一个都设置token,则就会显得非常的笨拙。此时我们可以遍历全部的dom,获取全部的a标签和form标签,进行添加就行了。但是如果页面的DOM是动态生成的,则需要程序员自己编写代码将token放入。还存在一个问题就是:如何才能保证token不被攻击者截获。
添加token方式总结:
- 安全程度比Referer更高
- 实现方式上稍微复杂
- 需要保证token存储的安全性
5.3、在HTTP头中自定义属性并验证
这种方法也是保存token,但是其实和上述不同的是,其在HTTP头部保存token,我们可以一次性给访问该网站的请求都加上该自定义字段,但是如何将数据存放在HTTP中呢?此时我们就需要另一个模块,XHRHTTPRequest,当我们使用该模块时,存在另一个弊端,就是只能是异步请求。其他请求都是无法访问的。另外,对于没有进行 CSRF防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。
验证head方式总结:
1、使用方式简单,不容易泄漏
2、使用地方局限。
补充:防火墙的架设是Web安全的重要保障,企业级防火墙的架设应当有两级防火墙,Web服务器和部分应用服务器可以架设在两级防火墙之间的DMZ,而数据和资源服务器应当架设在第二级防火墙之后。
总结
到此这篇关于如何防范CSRF攻击的文章就介绍到这了,更多相关防范CSRF攻击内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_47450807/article/details/123227342
本文链接:https://my.lmcjl.com/post/20484.html
4 评论