CSRF攻击的全称是跨站请求伪造(cross site request forgery):
是一种对网站的恶意利用,尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。
image.png
简单理解:一种可以被攻击者用来通过用户浏览器冒充用户身份向服务器发送伪造请求并被目标服务器成功执行的漏洞被称之为CSRF漏洞。
特点:
用户浏览器:表示的受信任的用户。
冒充身份:恶意程序冒充受信任用户(浏览器)身份。
伪造请求:借助于受信任用户浏览器发起的访问。
CSRF攻击原理
CSRF攻击攻击原理及过程如下:
- 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况 下携带Cookie信息,向网站A发出请求。
网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
image.pngCSRF漏洞成因分析
get请求:
<img src="http://www.study.com/admin/resetPassword?id=1" />
<iframe src="http://www.study.com/admin/resetPassword?id=1" style='display:none'></iframe>
post请求:
隐藏表单、自动提交,把功能通过iframe引入新页面
<iframe src="form.html" style='display:none'></iframe>
CSRF漏洞危害分析
CSRF攻击特点:
攻击时机:网站的cookie在浏览器中没有过期,不关闭浏览器或者退出登录
攻击前提:对目标网站接口有一定了解
攻击难度:攻击难度高于XSS
与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
危害:
修改密码、网银转账 ......
image.png
CSRF安全防护
区分是否为伪造请求
二次验证
referer校验:
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
在网关过滤器中校验
在对应的微服务中定义拦截器
具体的业务代码中实现
例外情况:登录
image.png
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.debug("拦截器拦截到对:{}的访问", request.getRequestURI());
String referer = request.getHeader("referer");
logger.debug("referer:{}", referer);
StringBuilder sb = new StringBuilder();
sb.append(request.getScheme()).append("://").append(request. getServerName());
logger.debug("basePath:{}", sb.toString());
if (referer == null || referer == "" || !referer.startsWith(sb.toString())) {
response.setContentType("text/plain; charset=utf- 8");
response.getWriter().write("非法访问,请通过页面正常 访问!");
return false;
}
return true;
}
业务二次校验:
修改密码,需输入原密码
交易系统设置交易密码
增加图形验证码校验
网银转账短信验证码
CSRFTester
CSRFTester是一款CSRF漏洞的测试工具,此工具的测试原理如下:它使用代理抓取浏览器中访问过的连接以及表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一次伪造客户端请求,如果被测试的请求成功被网站服务器接受,则说明存在CSRF漏洞,否则不存在。此款工具也可以被用来进行CSRF攻击。
image.png
image.png
image.png
image.png
网友评论