vlambda博客
学习文章列表

Web系统CSRF攻击与防御


一、概念
        全称是跨站请求伪造(cross site request forgery),指通过伪装成受信任用户的进行访问(利用受害者尚未失效的身份认证信息,诱骗其点击恶意链接或者包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求,完成危险操作)。

二、CSRF与XSS、SQL注入的区别

CSRF:属于业务逻辑漏洞,在服务器看来,所有请求都是合法正常的XSS、SQL注入等:都是属于技术漏洞XSS是基于客户信任服务器,而CSRF是基于服务器信任客户(经过身份验证的)


三、举例说明
        通俗的讲就是说我访问了 A 网站,然后 cookie 存在了浏览器,然后我又访问了一个流氓网站,不小心点了流氓网站一个链接(向 A 发送请求),这个时候流氓网站利用了我的身份对 A 进行了访问。比如,说我登录了 A 银行网站,然后我又访问了室友给的一个流氓网站,然后点了里面的一个链接 www.xiaobaicai.com/jiaoyi?account=888&money=666,那么这个时候很可能我就向账号为 888的人转了 666元大洋。这个攻击方式不一定是我点了这个链接,也可以是这个网站里面一些资源请求指向了这个转账链接,比如说<img >

Web系统CSRF攻击与防御


四、常见防御方式

1. 用户本地存储 cookie,攻击者利用用户的 cookie 进行认证,然后伪造用户发出请求预防。之所以被攻击是因为攻击者利用了存储在浏览器用于用户认证的 cookie,那么如果我们不用 cookie 来验证不就可以预防了。所以我们可以采用 token+随机码(不存储于浏览器)认证。

Web系统CSRF攻击与防御



2. 通过 referer 识别,HTTP Referer 是 header 的一部分(添加HTTP Referer,这个Referer字段主要是标明我们请求的来源,当我们通过一个恶意站点去访问一个可信任的站点的时候,可信任站点其实是能够识别这个请求是来自恶意站点的,因为Referer字段会标明它的来源)。当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。那么这样的话,我们必须登录银行 A 网站才能进行转账了。

Web系统CSRF攻击与防御



3. 加强测试,及时发现,及时修复



--------------------------------------