CSRF攻击原理及防御

来源于https://www.cnblogs.com/shytong/p/5308667.html

一、CSRF攻击原理



CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。想要深入理解CSRF的攻击特性我们有必要了解一下网站session的工作原理。

  session我想大家都不陌生,无论你用.net或PHP开发过网站的都肯定用过session对象,然而session它是如何工作的呢?如果你不清楚请往下看。 
先问个小问题:如果我把浏览器的cookie禁用了,大家认为session还能正常工作吗?

  答案是否定的,我在这边举个简单的例子帮助大家理解session。 
比如我买了一张高尔夫俱乐部的会员卡,俱乐部给了我一张带有卡号的会员卡。我能享受哪些权利(比如我是高级会员卡可以打19洞和后付费喝饮料,而初级会员卡只能在练习场挥杆)以及我的个人资料都是保存在高尔夫俱乐部的数据库里的。我每次去高尔夫俱乐部只需要出示这张高级会员卡,俱乐部就知道我是谁了,并且为我服务了。

  这里我们的高级会员卡卡号 = 保存在cookie的sessionid; 
而我的高级会员卡权利和个人信息就是服务端的session对象了。

  我们知道http请求是无状态的,也就是说每次http请求都是独立的无关之前的操作的,但是每次http请求都会将本域下的所有cookie作为http请求头的一部分发送给服务端,所以服务端就根据请求中的cookie存放的sessionid去session对象中找到该会员资料了。 
当然session的保存方法多种多样,可以保存在文件中,也可以内存里,考虑到分布式的横向扩展我们还是建议把它保存在第三方媒介中,比如redis或者mongodb。

  我们理解了session的工作机制后,CSRF也就很容易理解了。CSRF攻击就相当于恶意用户A复制了我的高级会员卡,哪天恶意用户A也可以拿着这张假冒的高级会员卡去高尔夫俱乐部打19洞,享受美味的饮料了,而我在月底就会收到高尔夫俱乐部的账单!

  了解CSRF的机制之后,危害性我相信大家已经不言而喻了,我可以伪造某一个用户的身份给其好友发送垃圾信息,这些垃圾信息的超链接可能带有木马程序或者一些欺骗信息(比如借钱之类的),如果CSRF发送的垃圾信息还带有蠕虫链接的话,那些接收到这些有害信息的好友万一打开私信中的连接就也成为了有害信息的散播着,这样数以万计的用户被窃取了资料种植了木马。整个网站的应用就可能在瞬间奔溃,用户投诉,用户流失,公司声誉一落千丈甚至面临倒闭。曾经在MSN上,一个美国的19岁的小伙子Samy利用css的background漏洞几小时内让100多万用户成功的感染了他的蠕虫,虽然这个蠕虫并没有破坏整个应用,只是在每一个用户的签名后面都增加了一句“Samy 是我的偶像”,但是一旦这些漏洞被恶意用户利用,后果将不堪设想,同样的事情也曾经发生在新浪微博上面。

  举例:

  CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。

二、CSRF防御



   ·通过 referer、token 或者 验证码 来检测用户提交。
  ·尽量不要在页面的链接中暴露用户隐私信息。
  ·对于用户修改删除等操作最好都使用post 操作 。
  ·避免全站通用的cookie,严格设置cookie的域。

三、CSRF防御示例



这里我使用基于Django中Csrf-token进行防御

(1)利用form表单进行post提交

<form action="/login/" method="post">
        <p>
            <input type="text" name="username" placeholder="username" />
        </p>
        <!----------通过form表单将CSRF_TOKEN发送到后台进行验证---------->
        {% csrf_token %}
        <p>
            <input type="password" name="password" placeholder="password" />
        </p>
        <p>
            <input type="checkbox" name="box" value="1" /> 10s超时
        </p>
        <p>
            <input type="submit" value="提交" />
        </p>
        <input type="button" id="btu-1" value="Ajax-1" />
        <input type="button" id="btu-2" value="Ajax-2" />
    </form>

(2)利用Ajax进行POST提交

Html示例同上

$(function () {

            $.ajaxSetup({       // 对所有的Ajax进行设置
                beforeSend:function (xhr,settings) {
                    xhr.setRequestHeader(‘X-CSRFtoken‘,$.cookie(‘csrftoken‘))     //设置Ajax中的header,使下面所有的Ajax里都包含headers
                }
            });

            $(‘#btu-1‘).click(function () {
                $.ajax({
                    url:"/login/",
                    type:"POST",
                    //headers:{"X-CSRFtoken":"$.cookie(‘csrftoken‘)"}
                    data:{‘username‘:"root","password":"123"},
                })
            })
        })()

            $(‘#btu-2‘).click(function () {
                $.ajax({
                    url:"/login/",
                    type:"POST",
                    //headers:{"X-CSRFtoken":"$.cookie(‘csrftoken‘)"}
                    data:{‘username‘:"root","password":"123"},
                })
            })
        })()

原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9102365.html

时间: 2024-11-04 10:17:54

CSRF攻击原理及防御的相关文章

CSRF 攻击原理和防御方法

1. CSRF攻击原理 CSRF(Cross site request forgery),即跨站请求伪造.我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息.而CSRF确实,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”. 一般而且存在XSS漏洞的网站,也极有可能存在CSRF漏洞.因为CSRF攻击中的那个“伪造的请求”的URL地址,一般是通过XSS攻击来注入到服务器中的.所以其实CSRF是以XSS为基础

CSRF攻击原理以及防御

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 三.CSRF漏洞现状 CSRF这

XSS CSRF攻击原理及防御

xss:http://www.cnblogs.com/shytong/p/5308641.html xsrf:http://www.cnblogs.com/shytong/p/5308667.html

148.CSRF攻击原理分析、防御、装饰器、中间件、IFrame以及js实现csrf攻击

CSRF攻击概述: CSRF(Cross Site Request Forgery 跨站域请求伪造)是一种网站攻击的方式,它在2007年曾被列为互联网20大安全隐患之一.其他的安全隐患,比如SQL脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御.然而,对于大多数人来说,CSRF还是很陌生的,Gmail在2007年底也存在csrf漏洞,从而被黑客攻击而使Gmail的用户造成巨大的损失. CSRF攻击原理: 网站是通过cookie来实现登录功能的.而cookie只

CSRF攻击原理及预防手段

CSRF全程 Cross Site Request Forgery, 跨站域请求伪造.这种攻击方式相对于XSS,SQL注入等攻击方式比较晚被发现,今天就来讲解下这种攻击方式以及避免方式. 攻击过程 假设abc用户登录银行的网站进行操作, 同时也访问了攻击者预先设置好的网站. abc点击了攻击者网站的某一个链接,这个链接是http://www.bank.com/xxxx指向银行,银行服务器会根据这个链接携带的参数会进行转账操作. 银行服务器在执行转账操作之前会进行SESSION验证是否登录, 但是

CC攻击原理和防御方法

很多朋友都知道木桶理论,一桶水的最大容量不是由它最高的地方决定的,而是由它最低的地方决定,服务器也是一样,服务器的安全性也是由它最脆弱的地方决定的,最脆弱的地方有多危险服务器就有多危险.DDOS也是一样,只要你的服务器存在一个很耗资源的地方,限制又不够,就马上成为别人DDOS的对象.比如SYN-FLOOD,它就是利用服务器的半连接状态比完全连接状态更耗资源,而SYN发动方只需要不停的发包,根本不需要多少资源. 一个好的DDOS攻击必须是通过自己极少资源的消耗带来对方较大的资源消耗,否则比如ICM

浅谈JavaScript DDOS 攻击原理与防御

前言 DDoS(又名"分布式拒绝服务")攻击历史由来已久,但却被黑客广泛应用.我们可以这样定义典型的DDoS攻击:攻击者指使大量主机向服务器发送数据,直到超出处理能力进而无暇处理正常用户的合法请求,最终导致用户无法正常访问网站. 近年来,DDoS攻击手段已日趋多元化——攻击者通过各种奇技淫巧诱使不知情主机参加攻击.比如,[注1]历史上数据量最大(超过400Gbps)的DDoS攻击就是通过[注2]NTP反射完成的.时至今日,我们已经发现一个令人不安的趋势:攻击者通过恶意的JavaScri

界面操作劫持攻击原理与防御方法

1. 攻击原理 界面劫持,分为点击劫持.拖放劫持.触屏劫持.就是我们的点击,拖放,触屏操作被劫持了,而去操作了其它的透明隐藏的界面.其原理是利用透明层+iframe,使用了css中的opacity和z-index等属性,来到达透明和位于其它界面的上方,然后使用iframe来嵌入劫持页面.到达了用户操作的不是它看到的,不是他以为的那个界面,而是那个透明的位于上层的界面. 2. 防御方法 有重要会话的交互页面不允许使用iframe嵌入,或者值允许被同域的iframe嵌入. 2.1 X-Frame-O

不可不知 DDoS的攻击原理与防御方法

DoS攻击.DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service的简写就是分布式拒绝服务,而DRDoS就是Distributed Reflection Denial of Service的简写,这是分布反射式拒绝服务的意思. 不过这3中攻击方法最厉害的还是DDoS,那个DRDoS攻击虽然是新近出的一种攻击方法,但它只是DDoS攻击的变形,它的唯一不同就是不用占领