第四章-CSRF
内容目录
CSRF
Cross Site Request Forgery
跨站请求伪造
4-1. 概述
CSRF两大关键点:
跨站点的请求
请求是伪造的
攻击样例关键点:
跨域发出了一个GET请求
可以无JavaScript参与
请求是身份认证后的
4-2.类型
HTML CSRF攻击
** CRSF请求由HTML元素发出**
- 能设置src/href等链接地址的标签都可以发起一个GET请求。
- 可通过JavaScript生成的标签对象或CSS对象发起GET请求。
- 发起POST请求只能通过form提交的方式。
JSON HiJacking攻击
攻击过程是CSRF,不过是对AJAX响应中最常见的JSON数据类型进行的劫持攻击。
JSON有两种格式
- 字典格式
{
"id": 1,
"name": "foo",
"email": "foo@gmail.com
} - 列表格式
["foo","xoo","coo"] -
JSON数据如果直接以字典形式返回直接在浏览器中显示会报错,原因是浏览器以为"{" 开头的脚本应当是一串代码块。所以JSON数据一般如下方式处理:
eval("("+JSON_DATA+")"); //前后加上圆括号 - 以列表形式返回的JSON数据是一个Array对象
注:曾经可通过劫持Array数据来进行JSON HiJacking攻击,如今此攻击失效。
Flash CSRF攻击
两要点:
- 跨域获取隐私数据
- 跨域提交数据操作
跨域发起的POST/GET请求对浏览器来说合法,于Flash亦同。
<!--HTML CSRF形式进行国内某微博发消息CSRF漏洞利用-->
<form action="http://t.xxx.com/article/updatetweet" mothod="post">
<input type="hidden" name="status" value="html_csrf_here."/>
</form>
<script>document.forms[0].submit();</script>
//Flash CSRF实现
import flash.net.URLRequest;
function post(msg){
var url = new URLRequest("http://t.xxx.com/article/updatetweet");
var _v = new URLVariables();
_v = "status="+msg;
url.method = "POST";//POST方式提交
url.data = _v;
sendToURL(url);//发送
}
post('flash_csrf_here');
4-3. 危害
- 篡改目标网站上的用户数据
- 盗取用户隐私数据
- 作为其他攻击向量的辅助攻击手法
- 传播CSRF蠕虫