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

[理论知识]

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

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

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

[步骤解读一]无令牌表单

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

账户名称:

账户密码:

然后我们再创建一个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页面,效果如下:

e0155d70bc3e5f4d3785121f5b41b3b0.png

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

0f6f48dbaec1877ed03bfd67cdf9ea40.png

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

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

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

1839e9ab71e14593cd811d891ae990cd.png

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

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

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

$(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);

}

);

});

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

df1b1311dd6ef88f05c1c7695d68c656.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值