小博老师解析Java核心技术点|小博老师解析Java核心技术点 ——表单令牌(二)
[步骤解读三]添加表单令牌
这种用户绕开表单的情况是非常危险的,比如用户可以自己编写一个小程序,循环向服务器发送多次请求,使用穷举算法暴力破解密码。因此这种现象我们在编程中要想方设法防止。
为了防止这种用户绕开表单的现象,我们可以在服务器生成一个UUID(全局唯一标识)作为令牌,存放在表单的隐藏域中,同时在Session中也存放一份。当表单提交给服务器时,服务器判断表单提交的令牌数据,是否和Session中存放的数据一致。并且每次会话都会随机生成新的令牌,因此用户就无法绕开表单而循环多次向服务器发送请求了。
接下来,小博老师就为大家演示一下如何简单制作表单令牌的过程,首先我们修改jsp页面,核心代码如下:
"BWFToken"method="POST">
账户名称:"text"name="username"/>
账户密码:"password"name="userpass"/>
"hidden"name="BWFToken"value=https://www.it610.com/article/""/>
"submit"value=https://www.it610.com/article/"登录"/>
我们通过浏览器访问jsp页面,然后右键、查看源代码:
文章图片
发现表单中增加了一个隐藏域,其值就是令牌的数据,并且多次刷新页面,这个令牌值每次都不一样的(如果需要,可以再次进行加密)。
接下来我们修改Servlet中的功能,优先校验表单令牌数据,核心代码如下:
@WebServlet("/BWFToken")
publicclassBWFTokenServletextendsHttpServlet {
protectedvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse)
throwsServletException, IOException {
PrintWriterout=response.getWriter();
// 校验令牌数据
if(request.getSession().getAttribute("BWFToken") ==null||request.getParameter("BWFToken") ==null||request.getSession().getAttribute("BWFToken").toString().equals(request.getParameter("BWFToken") ) ==false){
// 令牌校验失败给出提示信息
out.println("Yourtokenhas error!");
return;
}
Stringusername=request.getParameter("username");
Stringuserpass=request.getParameter("userpass");
【小博老师解析Java核心技术点|小博老师解析Java核心技术点 ——表单令牌(二)】out.println("username="+username+",userpass="+userpass);
}
}
至此,简单的表单令牌效果已经制作完成了,我们来测试一下。首先我们通过jsp页面向服务器Servlet发送请求,令牌数据校验正确:
文章图片
然后我们再使用之前编写的小程序,利用Ajax向服务器Servlet发送请求:
文章图片
推荐阅读
- 眼光要放高远
- 子龙老师语录
- 孩子行为背后的秘密(2)胡老师讲座感悟
- 周老师《金鸡图》
- 姚老师互动问答会|姚老师互动问答会 # 问题001(如何更有智慧的和身边人分享金刚智慧())
- 吉他课
- 08黑龙江迟淑荣弯柳树网络学院第五期学习赵宗瑞老师主讲的(传统文化与身心健康)教育体系心得体会
- 一块玻璃要了九岁男童的命|一块玻璃要了九岁男童的命 家长老师是怎么教育孩子的()
- 鹿鸣高级营养老师徐老师分享应该注意的6种食物
- Quartz|Quartz 源码解析(四) —— QuartzScheduler和Listener事件监听