令牌机制,校验码

网页设计中非常重要的验证机制,就是令牌处理机制和生成验证码的机制。这两个功能是在用户进行账号登陆的时候经常使用的功能,其中令牌机制的一个重要作用就是在购物网站中使用防止用户的重复提交。验证码是防止有人恶意的使用机器人暴力攻击。

令牌机制

客户端重复提交:客户几乎不做输入数据修改就无限制次数提交表单到服务器,比如用户点击后退回到上一页面再次提交。防止用户重复提交的根本目的是防止过多相同的冗余数据,同时还可以防止用户在购物后重复提交成功订单,这个很重要,防止办法就是确认用户输入了数据模块才不算重复提交。
解决方案:第一种解决方法客户端使用的技术JavaScript技术,服务端使用的是先查询再比较。这种方法的缺点是浪费了数据库资源。

  另一种方法就是使用令牌管理机制(token):每一次提交必须获取一个新的令牌。这个方法的流程是这样的。

1、服务端先为特定的客户制作一张令牌,服务端保存该令牌(session),给客户端发送一个令牌, <input type=”hidden” >-------客户端保存。

2、客户端携带令牌和需要提交的数据到服务端。

3、服务端先核对令牌,如果核对正确允许插入提交的数据并且更新令牌;如果核对不通过,向客户端提示出错。

在这里就涉及到一个令牌的生成问题,到底什么样的令牌才算是合格的令牌呢?也就是令牌要有什么要求?令牌只要保证唯一性就可以了。一般生成令牌保证唯一性的方法就是使用系统时间+sessionid的。有了令牌就可以让用户再重复提交表单或者在Session超时的情况下无法提交表单了。
令牌机制的操作的功能点:制令牌----存令牌-----送令牌------对令牌------废令牌
这些机制点中使用的模块在客户端使用的:制令牌、存令牌、送令牌。主要目的就是得到令牌。在服务端使用的是:对令牌和废令牌。
这些模块将要使用的方法:
a) 产生令牌 token ,TokenUtil-----字符串
b) 服务端保存令牌:  session.setAttribute("token", token)
c) 客户端保存令牌: <input type="hidden" name="token"  value="<%=session.getAttribute("token")%>">   

d) 处理输入数据的模块-----
e) 获取客户端令牌: request.getParameter("token")
f) 获取服务端令牌: session.getAttribute("token");
g) 核对令牌: equals
h) 废除令牌: session.removeAttribute("token");  相当于产生一张null令牌。也可以产生新令牌。

 

随机码技术

防止机器人登陆:就是防止有人恶意的使用尝试登陆获取用户的密码。解决方法:限制用户在一段时间内尝试的次数。另外一种方法就是使用生成的随机验证码。生成随机码的操作:制随机码-----存随机码-------送随机码(图片Servlet)--------对随机码-------废随机码。

技术要点:生成随机数字,使用java中的一个类,叫做java.util.Random类。使用该类时需要使用实例化对象创建一个随机数生成器。
图片的缩放和旋转:使用java.aet.geom.AffineTransform类。这个类用来实现对图片缩放和旋转。
随机绘制干扰线:生成干扰线的目的是防止一些机器人使用图片分析器分析图片中的代码来获取数字,如果加上随机线,就可以有效的干扰这种行为。在Graphics类中有一个绘制折线的方法drawPolyline()方法。这个方法可以实现这种折线的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值