跨站请求伪造 CSRF 漏洞原理以及修复方法

漏洞名称:跨站请求伪造(CSRF)

漏洞描述

跨站请求伪造攻击,Cross-Site Request Forgery(CSRF),攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用服务器发送一个改变用户信息的HTTP请求。CSRF攻击可以从站外和站内发起。从站内发起CSRF攻击,需要利用网站本身的业务,比如‚自定义头像‛功能,恶意用户指定自己的头像URL是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。从站外发送请求,则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者用户,受害者用户打开时,会发起一个请求。

威胁描述:攻击者使用CSRF攻击能够强迫用户向服务器发送请求,导致用户信息被迫修改,甚至可引发蠕虫攻击。如果恶意用户能够知道网站管理后台某项功能的URL,就可以直接攻击管理员,强迫管理员执行恶意用户定义的操作。

检测条件

1、 Web业务运行正常
2、 存在数据提交的所有功能点。

检测方法

一、 检测方式多种多样:工具常常会扫描得到CSRF的漏洞,但是一般常常为误报,重点
还是依靠手工来进行检测,以下来举例说明其中一种检测以及攻击方案:

1、 设置页面test.htm中,页面中有一个表单,和一段脚本,脚本的作用是,当页面加载时,浏览器会自动提交请求。页面代码如下:

2、 诱使用户在登录目标系统后执行URL链接http://xx.x.xx.xxx /test.htm
3、 用户打开test.htm后,会自动提交表单,发送给www.test.com下的那个存在CSRF漏洞的web应用,用户信息被篡改。
4、 在整个攻击过程中,受害者用户仅仅看到了一个空白页面(可以伪造成其他无关页面),并且一直不知道自己的信息已经被修改了。

修复方案:

1、 通过referer判断页面来源进行CSRF防护,该方式无法防止站内CSRF攻击及referer字段伪造。
2、 重要功能点使用动态验证码进行CSRF防护。
3、 通过token方式进行CSRF防护:

3.1、 在Session中绑定token。如果不能保存到服务器端Session中,则可以替代为保存到Cookie里。
3.2、 在 form 表 单 中 自 动 填 入 token 字 段 , 比 如 name="anti_csrf_token" value="$token" />。
3.3、 在HTTP请求中自动添加token。在服务器端对比POST提交参数的token与Session中绑定的token是否一致.

4、 为每个session创建唯一的随机字符串,并在受理请求时验证:

>
//判断客户端提交的随机字符串是否正确 String randomStr = (String)request.getParameter("randomStr"); if(randomStr == null) randomStr=""; if(randomStr.equals(request.getSession().getAttribute("randomStr"))) {//处理请求} else{ //跨站请求攻击,注销会话 }

你可能感兴趣的:(安全,xss,安全,网络,网络安全,渗透测试,WEB安全)