广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >CSRF攻击是什么?如何防范CSRF攻击?
  • 467
分享到

CSRF攻击是什么?如何防范CSRF攻击?

2024-04-02 19:04:59 467人浏览 安东尼
摘要

目录一、什么是CSRF攻击二、CSRF攻击的流程三、常见的CSRF攻击1、GET类型的CSRF2、POST类型的CSRF四、CSRF测试五、预防CSRF攻击5.1、验证HttpRef

一、什么是CSRF攻击

CSRF攻击的全称为跨站脚本伪造,也称为One Click Attack或者Session Eiding,通常缩写为CSRF或者XSRF。CSRF通过伪装来自受信任的用户的请求来攻击受信任的网站。与XSS相比,CSRF攻击往往不太流行(因此对其进行防范的资源也是相当紧缺的)和难以防范的,所以被认为比XSS更具危险性。我们可以这么理解CSRF攻击:首先攻击者会先盗用你的身份,然后以你的名义进行某些非法操作,甚至盗走你的账户购买的商品等。CSRF攻击其值是利用WEB中用户身份认证验证的一个漏洞:简答的身份验证仅仅可以保证请求发自某一个用户的浏览器,却无法保证请求本身是用户资源发出的。

二、CSRF攻击的流程


CSRF攻击原理过程如下:

1、用户C打开浏览器,访问安全网站A,输入用户名和密码请求登录网站A.
2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录A成功,可以正常发送请求到网站A。
3、用户没有退出A之前,在同一个浏览器中,打开一个Tab页面来访问网站B.
4、网站B接收到用户的请求后,返回一些攻击代码,并且发出一个请求要求访问第三方站点A.
5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发出的,所以会根据用户C的cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

从上述的流程可以看出,想要达成CSRF攻击,必须达成两个基本条件。

1、登录受信任网站A,并且在本地生成Cookie。
2、在不退出登录网站A的前提下,访问危险网站B.

三、常见的CSRF攻击

1、GET类型的CSRF

银行站点A: 它以GET请求的方式来完毕银行转账的工作:如http://www.mybank.com.Transfer.PHP?toBankId=11&money=1000
危险站点B:其中存在一段html代码为<img src=http://www.mybank.com/Transfer.php?toBankId=11&1000>
首先你登录了银行站点A,然后访问危险站点B,这时你就会发现自己的银行账号少了1000元。为什么会这样呢?原因是银行站点A违反了HTTP规范,使用GET请求更新资源。在訪问危急站点B的之前,你已经登录了银行站点A,而B中的 一个合法的请求,但这里被不法分子利用了)。所以你的浏览器会带上你的银行站点A的Cookie发出Get请求,去获取资源以GET的方式请求第三方资源(这里的第三方就是指银行站点了,原本这是http://www.mybank.com/Transfer.php?toBankId=11&money=1000 ,结果银行站点服务器收到请求后,觉得这是一个更新资源操作(转账操作),所以就立马进行转账操作。

2、POST类型的CSRF

这种类型的CSRF危害没有GET类型的大,利用起来通常使用的是一个自动提交的表单,如
<fORM action=http://wooyun.org/csrf.php method=POST>
    <input type="text" name="xx" value="11" />
</form>
<script> document.forms[0].submit(); </script> 
访问该页面后,表单会自动提交,相当于模拟用户完成一次POSt操作。

四、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攻击内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: CSRF攻击是什么?如何防范CSRF攻击?

本文链接: https://www.lsjlt.com/news/141545.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSRF攻击是什么?如何防范CSRF攻击?
    目录一、什么是CSRF攻击二、CSRF攻击的流程三、常见的CSRF攻击1、GET类型的CSRF2、POST类型的CSRF四、CSRF测试五、预防CSRF攻击5.1、验证HTTPRef...
    99+
    2022-11-13
  • csrf攻击通过什么防范
    防范csrf攻击的方法在HTTP中添加验证在HTTP中添加验证,通过验证HTTP Referer字段,实现预防csrf攻击。在请求头中添加自定义属性在请求头中添加自定义属性,并且加以验证,从而实现预防csrf攻击。使用专线网络直接使用专用的...
    99+
    2022-10-09
  • laravel如何防csrf攻击
    Laravel提供了多种方式来防止CSRF攻击。以下是一些常见的防御措施: 使用CSRF令牌:Laravel自动为每个用户生成一...
    99+
    2023-10-28
    laravel
  • .net如何防御csrf攻击
    在.net项目中防御csrf攻击的方法1首先,在.net项目添加以下代码;<% using (Html.BeginForm("Login", "Admin", FormMethod.Post))...
    99+
    2022-10-07
  • laravel如何防护csrf攻击
    在laravel中预防csrf攻击的方法首先,使用laravel中的csrf_token全局帮助函数 ,获取请求中的Token值;<input type="hidden" name="_token&quo...
    99+
    2022-10-11
  • csrf攻击原理是什么
    csrf攻击是利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。...
    99+
    2022-10-24
  • 如何避免CSRF攻击
    CSRF是一种让人难以防范的漏洞。不过还是要注意一下的,如果浏览器提示“链接和证书域名不匹配”的警告信息时,请不要继续浏览,应立即关闭浏览器或者返回上一页。可使用某些带有“隐私浏览”功能的浏览器,比如Safari。“隐私浏览”功能可以让用户...
    99+
    2022-10-10
  • java如何避免csrf攻击
    在java中使用spring实现避免csrf攻击通过将以下代码添加到Java项目中即可实现避免csrf攻击的功能。package com.yihaomen.intercepter;import javax.servlet.http.Cook...
    99+
    2022-10-07
  • WEB安全入门:如何防止 CSRF 攻击?
    现在,我们绝大多数人都会在网上购物买东西。但是很多人都不清楚的是,很多电商网站会存在安全漏洞。乌云就通报过,国内很多家公司的网站都存在 CSRF 漏洞。如果某个网站存在这种安全漏洞的话,那么我们在购物的过程中,就很可能会被网络黑客盗刷信用卡...
    99+
    2018-07-02
    WEB安全入门:如何防止 CSRF 攻击?
  • ajax中如何使用AntiForgeryToken防止CSRF攻击
    小编给大家分享一下ajax中如何使用AntiForgeryToken防止CSRF攻击,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2022-10-19
  • laravel怎么阻止csrf攻击
    这篇文章主要讲解了“laravel怎么阻止csrf攻击”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“laravel怎么阻止csrf攻击”吧!首先,使用laravel中的csrf_token全...
    99+
    2023-07-04
  • 前端如何避免csrf攻击
    前端开发中避免csrf攻击的方法添加校验token在用户登录时,设置一个csrf的随机token,并种植在用户的cookie中,当用户关闭浏览器、或再次登录、退出时,对token进行清除。在服务端增加伪随机数客户端获取服务器通过cookie...
    99+
    2022-10-11
  • 为什么jwt避免了csrf攻击
    jwt全称Json Web Token,是一个长字符串,由Header(头部)、 Payload(负载)、Signature(签名)三部分组成。使用jwt验证,由于服务端不保存用户信息,不需要做sessonid复制,同时用户发请求给服务端时...
    99+
    2022-10-25
  • PHP中的CSRF攻击和防御指南
    CSRF攻击是指通过伪造用户认证信息,实现恶意请求的一种攻击方式。PHP作为一种广泛应用于Web开发的语言,更容易成为CSRF攻击的目标。本文将介绍CSRF攻击的基本概念、攻击方式及其在PHP语言中的应用场景,同时也提供针对PHP中的CSR...
    99+
    2023-05-20
    PHP CSRF攻击 防御指南
  • golang如何实现防止CSRF攻击的功能
    CSRF(Cross-site request forgery)是一种网络攻击技术,攻击者通过伪造用户的请求,达到欺骗服务器的目的。Golang 语言提供了一些工具库和框架,可以帮助我们实现防止 CSRF 攻击的功能。CSRF 基本原理CS...
    99+
    2023-05-14
  • csrf攻击在laravel中如何解决
    这篇文章主要介绍“csrf攻击在laravel中如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“csrf攻击在laravel中如何解决”文章能帮助大家解决问题。解决方法:1、利用Laravel...
    99+
    2023-07-02
  • Python djanjo之csrf防跨站攻击实验过程
    一.CSRF简介 CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click atta...
    99+
    2022-11-12
  • 怎么在Python中利用djanjo防csrf跨站攻击
    怎么在Python中利用djanjo防csrf跨站攻击?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.CSRF简介CSRF是什么?CSRF(Cross-sit...
    99+
    2023-06-15
  • SpringBoot防御CSRF攻击的流程及原理解析
    目录CSRF 原理CSRF实践CSRF防御前后端不分离方案前后端分离方案CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。这是一种非常常见...
    99+
    2023-05-18
    SpringBoot 防御 CSRF 攻击 SpringBoot CSRF 攻击
  • 美国服务器中CSRF攻击的原理是什么
    美国服务器中CSRF攻击的原理是:美国服务器中CSRF攻击是通过注入恶意URL地址,并在该地址中利用<img> 等标签和Javascript脚本写入攻击代码;具体分析如下:美国服务器CSRF攻击是指跨站请求伪造,另一个因为简写为...
    99+
    2022-10-23
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作