前言
上一篇写了web安全之xss,这一篇接着写CSRF。相对于XSS而已,CSRF的影响就小的多了,但是也不容小觑。
一、什么是CSRF
CSRF是跨站请求伪造,可能刚接触CSRF这个概念的人会很容易把它与XSS混淆。我们知道,攻击的发生是由各种请求造成的,对于 CSRF来说,它的请求有两个关键点:跨站点的请求与请求是伪造的。简单地说,其实就是当你登录了网站之后,黑客们诱导你点击另外一个链接,那个链接是黑客自己开发的,你打开之后他就在这个链接里面像你的服务器发起请求,从而借刀杀人。
二、举个例子
目标网站A:www.a.com 恶意网站B:www.b.com
两个域不一样,目标网站A上有一个删除文章的功能,通常是用户单击“删除链接”时才会删除指定的文章,这个链接是 www.a.com/blog/del?id=1,id号代表不同的文章。那么CSRF的攻击步骤就可以是这样:
- 1.在恶意网站B上编写一个CSRF页面(www.b.com/csrf.htm)
- 2.利用HTML的标签发出一个get请求,如图片、JS脚本、CSS样式、框架内容,这种请求的特点是可以绕过同源跨域,只是无法读取响应内容而已
<script>
new Image().src = 'http://www.a.com/blog/del?id=1'
</script>
- 3.由于目标网站没有做Referer判断,并且Cookie是用户登录目标网站A后的身份认证标志。跨域发出的请求也同样会带上目标网站A的用户Cookie,这样的请求就是身份认证后的,所以攻击成功。
三、CSRF请求中介
HTML中能够设置src/href等链接地址的标签都可以发起一个GET请 求,如:
<link href="">
<img src="">
<img lowsrc="">
<img dynsrc="">
<meta http-equiv="refresh" content="0; url=">
<iframe src="">
<frame src="">
<script src="">
<bgsound src="">
<embed src="">
四、CSRF的危害
CSRF有何危害?那就看CSRF能做什么,内容如下
- 篡改目标网站上的用户数据。
- 盗取用户隐私数据。
- 作为其他攻击向量的辅助攻击手法。
- 传播CSRF蠕虫。
五、CSRF的防御
总得来说,CSRF的主要防御手段是防止第三方来源的请求,主要是要识别第三方来源。那么方法具体可以有:
- 检查HTTP Referer字段是否同域
- 限制Session Cookie的生命周期,比如十分钟内有效
- 加入验证码,第三方的网站获取不到验证码,请求自然失败
- 使用一次性token