小博老师解析Java核心技术点 ——表单令牌(一)

[理论知识]html

咱们在网站开发的过程当中,常常须要会使用到form表单,表单提供了丰富的客户端与服务器端交互的控件。可是在开发过程当中,咱们须要注意表单的各方面安全性问题,好比防止客户绕开表单向服务器发送请求(这是一个很危险的现象)。jquery

在咱们学习过的技术中,有不少技术都是为了确保表单的安全性,好比验证码技术(虽然它是一个对于普通用户很不友好的东西)。小程序

在本系列文章中,小博老师就为你们讲解表单安全性的另外一个技术——表单令牌(Token)。浏览器

[步骤解读一]令牌表单安全

相信你们对于普通form表单与服务器的交互已经很是熟悉了,小博老师这里就不浪费篇幅多作介绍了,咱们新建一个jsp文件提供用户填写信息的表单,核心代码以下:服务器

<form action="BWFToken" method="POST">jsp

帐户名称:<input type="text" name="username"/><br/><br/>post

帐户密码:<input type="password" name="userpass"/><br/><br/>学习

<input type="submit" value="登  录"/>网站

</form>

而后咱们再建立一个Servlet来接受表单提交的数据,核心代码以下:

@WebServlet("/BWFToken")

public class BWFTokenServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

 

PrintWriter out = response.getWriter();

String username = request.getParameter("username");

String userpass = request.getParameter("userpass");

 

out.println("username="+username+",userpass="+userpass);

}

}

这样,咱们经过浏览器访问jsp页面,效果以下:


 

填写帐户名称和帐户密码,提交给Servlet后,效果以下:

 

 

[步骤解读二]用户绕开表单

以上是一个最普通的表单和服务器交互的案例,这样的表单是存在必定风险的,用户彻底能够绕开表单直接向服务器发送请求。

首先咱们访问jsp页面,而后在浏览器中右键、查看源代码,结果以下:

 

从源代码中用户能够获得几个关键信息。action="BWFToken",这个属性结合上当前jsp页面的url,用户能够得知服务器接收表单提交数据的url为“http://127.0.0.1:8090/BWF-JavaEE/BWFToken”。method="POST",从这个属性用户能够得知表单提交的方式为POST请求。<input type="text" name="username"/>和<input type="password" name="userpass"/>,这两个表单控件的源代码告诉了用户,该表单向服务器提交了两个参数信息,其key分别为username和userpass。

结合以上信息,用户能够轻松本身编写一个任意形式的小程序,绕开表单直接向服务器的Servlet发送请求。这种小程序能够是一个Applet,也能够是一个html页面,甚至是一个Ajax等等。

好比,小博老师为你们演示一下使用Ajax技术绕开表单直接向服务器的Servlet发送请求,核心代码以下:

<body>

<script src="script/jquery-1.4.2.min.js"></script>

<script>

$(document).ready(function(){

var username = "attacter";

var userpass = "crack";

$.post(

"http://127.0.0.1:8090/BWF-JavaEE/BWFToken",

"username="+username+"&userpass="+userpass,

function(data){

alert(data);

}

);

});

</script>

</body>

咱们使用浏览器访问该页面,效果以下:

 

相关文章
相关标签/搜索