悟空云课堂|第四十一期:CSRF(跨站伪造攻击)
Posted 中科天齐软件安全中心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了悟空云课堂|第四十一期:CSRF(跨站伪造攻击)相关的知识,希望对你有一定的参考价值。
该栏目为中科天齐软件安全中心全新规划的悟空云课堂,每周五准时上线,旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。
本期主题为第四十一期:CSRF(跨站伪造攻击)的相关介绍。
02
CSRF漏洞是如何攻击的?
(1)
受害者登录AA.com,并保留了登录凭证(Cookie)。
(2)
攻击者引诱受害者访问了BB.com。
(3)
BB.com 向 AA.com 发送了一个请求:a.com/act=xx。浏览器会默认携带AA.com的Cookie。
(4)
AA.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
(5)
AA.com以受害者的名义执行了act=xx。
(6)
攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让AA.com执行了自己定义的操作。
03
几种常见的CSRF:
(1)GET类型的CSRF
这类攻击非常简单,只需要一个HTTP请求:
<img src=”http://a.com/withdraw?amount=10000&for=hacker”>
(2)POST类型的CSRF
这种类型的 CSRF 利用起来通常使用的是一个自动提交的表单,如:
<form action="http://a.com/withdraw" method=POST>
<input type="hidden" name="account" value="airing" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" /></form><script> document.forms[0].submit(); </script>
访问该页面后,表单会自动提交,相当于模拟用户完成了一次 POST 操作。可见这种类型的 CSRF 与第一种一样,都是模拟请求,所以后端接口也不能将安全寄托在仅允许 POST 请求上。
(3)链接类型的 CSRF
链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种类型需要用户点击链接才会触发,但本质上与前两种一样。这种类型通常是在论坛发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:
<a href="http://a.com/withdraw.php?amount=1000&for=hacker" taget="_blank">
<a/>
由于之前用户登录了信任的网站A,并且保存登录状态,只要用户主动访问这个页面,则表示攻击成功。
04
如何防御CSRF?
(1)验证HTTP Referer字段
Referer是HTTP头中的一个字段,记录了 HTTP 请求的来源地址
。
这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查Referer 的值就可以。特别是对于当前现有的系统,不需要改变系统的任何已有代码和逻辑,没有风险,非常便捷。
然而,这种方法并非万无一失。Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。
(2)请求中添加token并验证
token就是服务端返回给客户端类似sessionid那样一长串的类值(长是为了防暴力猜解)。
CSRF依赖于浏览器访问链接时自动对应网站的cookie带上
,token不放cookie(一般form表单加个hidden属性的input标签来存放) CSRF就没法获取token,这样我们就可以通过检测发送过来的数据包中是否有正确的token值来决定是否响应请求。
这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 ,这样就可以把 token 以参数的形式加入请求了。另外还有一个问题就是怎么保障token本身的存储安全,不要被黑客截获。
05
如何检测出CSRF漏洞?
使用
Wukong(悟空)软件代码安全漏洞检测修复工具
,扫描网站源码,可以发现CSRF漏洞的注入点,如下图所示:
“CSRF跨站伪造攻击漏洞”
在CWE中被编号为
CWE-352: Cross-Site Request Forgery (CSRF)
更多的信息请参考CWE官网:http://cwe.mitre.org/data/definitions/352.html
06 往期阅读:(点击可跳转)
漏洞
<img src=”http://a.com/withdraw?amount=10000&for=hacker”>
<form action="http://a.com/withdraw" method=POST>
<input type="hidden" name="account" value="airing" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" /></form><script> document.forms[0].submit(); </script>
<a href="http://a.com/withdraw.php?amount=1000&for=hacker" taget="_blank">
<a/>
token就是服务端返回给客户端类似sessionid那样一长串的类值(长是为了防暴力猜解)。 CSRF依赖于浏览器访问链接时自动对应网站的cookie带上 ,token不放cookie(一般form表单加个hidden属性的input标签来存放) CSRF就没法获取token,这样我们就可以通过检测发送过来的数据包中是否有正确的token值来决定是否响应请求。
中科天齐公司是在中科院计算技术研究所的大力推动下
以中科院计算所国际领先的自主研究成果
“软件源代码安全漏洞检测修复平台(Wukong悟空)”为基础
组建的高新技术企业
扫码进入小程序
以上是关于悟空云课堂|第四十一期:CSRF(跨站伪造攻击)的主要内容,如果未能解决你的问题,请参考以下文章