美文网首页
CSRF攻击原理及防御

CSRF攻击原理及防御

作者: 似梦千寻 | 来源:发表于2019-03-17 19:23 被阅读0次

什么是CSRF?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性

下面内容转自:http://blog.csdn.net/zitian886/article/details/46630085

1 、CSRF攻击原理

CSRF攻击原理比较简单,如图1所示。其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

2、 CSRF漏洞防御

CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御。

2.1 服务端的防御

2.1.1 验证HTTP Referer字段    (什么是Referer ?  参见:https://www.sojson.com/blog/58.html

根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。

2.1.2 在请求地址中添加token并验证

CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

2.1.3 在HTTP头中自定义属性并验证

自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。

3 其他防御方法

CSRF攻击是有条件的,当用户访问恶意链接时,认证的cookie仍然有效,所以当用户关闭页面时要及时清除认证cookie,对支持TAB模式(新标签打开网页)的浏览器尤为重要。

尽量少用或不要用request()类变量,获取参数指定request.form()还是request. querystring (),这样有利于阻止CSRF漏洞攻击,此方法只不能完全防御CSRF攻击,只是一定程度上增加了攻击的难度。

相关文章

  • 面试12:安全类

    课程思维导图 Q:常见的攻击方式有哪些? CSRF:跨站请求伪造 XSS:跨站脚本攻击 Q:CSRF的原理及防御措...

  • CSRF攻击原理及防御

    什么是CSRF? CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One ...

  • CSRF攻击原理及防御

    一、CSRF介绍 CSRF(cross-site request forgery,跨站域请求伪造),也被称为 on...

  • 前端面试题六-前端安全性问题

    一、xss跨站脚本攻击 原理:方式:防御: 二、CSRF跨站请求伪造 原理:方式:防御 三、sql脚本注入 原理:...

  • 每日安全资讯(2020.01.14)

    CSRF攻击防御原理因为现代浏览器的工作机制原因,造成一种WEB攻击形态的存在, 这种攻击形式叫做CSRF攻击,以...

  • 长亭chaitin.cn的技术面

    宽字节注入的原理 CSRF原理及防御 SSRF原理及防御 xss:expression()支持的浏览器 渗透的几个...

  • CSRF

    一.本文介绍 1、本文介绍csrf攻击原理、CSRF分类、拖库、修改密码、防御。 2、环境:Discuz_X1.5...

  • CSRF攻击及防御

    CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导用户进入第三方网站,在第三...

  • Laravel - CSRF 攻击与防御

    CSRF攻击与防御-start 什么是CSRF攻击?CSRF是跨站请求伪造(Cross-site request ...

  • 网络安全系列(3) CSRF攻击

    1.CSRF概述 1.2 CSRF 攻击实例 1.3 CSRF 攻击的对象 2.当前防御 CSRF 的几种策略 2...

网友评论

      本文标题:CSRF攻击原理及防御

      本文链接:https://www.haomeiwen.com/subject/jstpmqtx.html