zoukankan      html  css  js  c++  java
  • web安全--CSRF

    CSRF是什么?

    CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击
    往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

    CSRF造成的影响是什么?

    你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

    CSRF漏洞现状

    CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI…… 而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

    CSRF原理


    从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
    1.登录受信任网站A,并在本地生成Cookie。
    2.在不登出A的情况下,访问危险网站B。

    看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:
    你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
    你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了……)
    上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
    CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!
    

    CSRF防御

    CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。下面说几种比较常用的解决方法:
    1、验证码
            这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄….这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,对于用户体验也非常差。
    
    2、Referer Check
            Referer Check在Web最常见的应用就是“防止图片盗链”。同理,Referer Check也可以被用于检查请求是否来自合法的“源”(Referer值是否是指定页面,或者网站的域),如果都不是,那么就极可能是CSRF攻击。
        但是因为服务器并不是什么时候都能取到Referer,所以也无法作为CSRF防御的主要手段。但是用Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。
    
    3、Anti CSRF Token
            现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。例子:用户访问某个表单页面。服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。在页面表单附带上Token参数。用户提交请求后, 
         服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。
         另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。
  • 相关阅读:
    c++中memset()函数的用法
    not exits用法讲解(以查询选修全部课程的学生为例)
    数据库中冲突可串行化的判断
    如何快速的判断一个数是否是完全平方数
    杭电oj2089c++
    3月7日学习日志
    3月5日 学习日志
    免编译二进制安装mysql5.7
    base64转换为图片以及图片转换为base64码
    Eclipse编辑JS响应慢,复制粘贴卡顿的解决方案
  • 原文地址:https://www.cnblogs.com/mary-123/p/12511056.html
Copyright © 2011-2022 走看看