您的位置:

CSRF原理详解

一、CSRF原理过程

CSRF(Cross-site request forgery)跨站请求伪造,是一种网络攻击方式,攻击者利用受害者已登录的身份,在不知情的情况下发送恶意请求,以执行未经授权的操作。攻击过程如下:

一、受害者登录网站A,A将用户登录信息保存在Cookie中.
二、受害者未退出网站A,进入恶意攻击者的网站B.
三、网站B向网站A发起请求,此时请求中包含了受害者在网站A中的Cookie和误导受害者执行的恶意代码.
四、网站A收到请求,由于含有合法身份验证Cookie,且服务器端没有做CSRF防御措施,便执行了攻击者的恶意代码.
五、攻击完成,受害者无感知.

二、CSRF原理验证

常见的CSRF防御措施是在向服务器提交请求时,提交一个随机生成的token,使得请求在服务器端通过校验后才会被执行。token的获取可以通过生成的方式避免重复,具体流程如下:

一、服务器生成一个 token,存储到数据库之类的高安全数据存储介质中,如果是多台服务器负载均衡,还要保证所有服务器拥有同一个 token.
二、服务器将这个token写入到表单的隐藏字段或cookie中.
三、用户接收到响应的页面,之后如果点击了一个提交请求,token值将随用户提交的数据一起发送到服务器.
四、服务器收到用户提交的数据和 token,然后比较两者的值是否相等,相等就说明这个请求是合法的.

三、XSS和CSRF攻击原理

与XSS(Cross-site scripting)跨站脚本攻击不同,XSS攻击时攻击者在web页面中注入恶意脚本,执行非法指令;而CSRF攻击通过获取到用户的身份信息,进而执行web页面的非法指令,我们可以对比这两种攻击方式的原理体会到他们的不同。

四、CSRF原理及利用方式

可以使用以下方式进行CSRF攻击:

  1. 通过图片URL发起攻击:img标签是可以直接把图片以URL形式展示,当用户访问这个恶意URL时就触发了攻击.
  2. 利用iframe发起攻击:攻击者在博客里添加了一个iframe标签,在里面填上类似csrf.html,在填上了一个Form表单,通过隐藏表单来设置攻击指令.
  3. 利用提交表单进行攻击:一个前端程序使用get和post请求,反馈一个转移指令给后台,攻击者会不断提交表单,执行恶意请求.

五、简述CSRF的攻击原理

要实现CSRF攻击,攻击者必须要让受害者登录了网站A并且在获取了受害者的Cookie后才能执行。攻击者可以通过发送恶意邮件,冒充可靠来源,引诱受害者点击恶意链接,来获取到受害者的Cookie。可能最常见的是图像方式,攻击者创建了一个img标签,其中设置了类似“img src=”http://www.a.com/account.asp?action=delete”的一些操作。只要受害者在浏览器里加载任何一个页面,这个请求便会被发送,而受害者不会察觉到这个请求的存在,其账户也随之被删除。

六、CSRF原理获取不到受害者的Cookie

为了达到获取受害者Cookie的目的,攻击者可以使用XSS、XSS Worm、跨域漏洞等方式,进一步来实现获取受害者Cookie的目的。其中,XSS是最为常见的攻击手段。攻击者注入JS代码后,获得了Cookie,然后发送到了攻击者的服务器上。XSS Worm更为危险,有了它,只要用户访问了攻击者的复制的网页,该病毒便会自动向所有用户的好友发送具有传染性的消息或网址,很快就会造成恶性传播。除了这两种方式,文件上传漏洞、Http Referer跨域等方式都可能被利用来获取到受害者的Cookie。

七、CSRF Token生成原理

一般来说,CSRF攻击防御都需要用到Token技术。这类Token有两种生成方法:

  1. 基于服务器Token,也就是每次生成的Token都是随机数,放到cookie或隐藏表单里面,服务器通过验证Token的值来遍历可信请求,如果验证成功则允许请求。这种方式需要服务器开销较多,但是更为安全。
  2. 基于用户Token,每个用户登录系统时,唯一的用户Token就创建出来,然后将这个Token和之后证明功能的流程中用的状态绑定到一起,一旦发现存在CSRF的情况,就将当前状态全部删除。这种方式不容易被攻击,但是效率较低。

八、CSR原理

CSR(Client-side Rendering),即客户端渲染,是一种在客户端生成用户界面的方式。此种方式0前端工程师可直接降低后端代码的负载,并且页面展示效果较好,但同时这也会带来安全问题,容易导致CSRF攻击等漏洞;通过用户输入和表单提交可以发起CSRF攻击,也能够基于用户历史错误的行为来构造XSS攻击,故前端工程师对于基本的安全问题必须要有足够的了解。

九、CSRF攻击

CSRF攻击的最终目的是要让受害者不知不觉间向服务器发送请求。攻击者需要了解被攻击系统的请求方式,然后初始化一些参数,最终组装成请求参数提交至服务器。提交恶意请求的方式有多种,其中最常见的就是提交表单,攻击者会通过以下方式发起CSRF攻击:

一、提交表单
二、构造一个image对象,利用javascript发起post请求发出。
三、修改用户账户信息
四、利用iframe来发送CSRF攻击请求,直接跳转至相关代码或者结果页面而不要主动发起请求。

十、CSRF危害

CSRF攻击主要针对用户隐私数据、用户既有资源的篡改、用户无法感知恶意客户端的危害。以上这些危害都会影响到用户,导致资金的损失、账户的被盗等严重问题,因此,科技界与法律界应该共同面对并解决CSRF攻击带来的弊端。