专注于Web技术的研究

oracle,linux,java,open source,c#,搜索引擎

博客园 首页 新随笔 联系 订阅 管理
 

网站认证码的设计

目的:

目前网站认证码,存在缺陷,认证码是存放在Cookie中,存在极大的安全隐患,而且同个浏览器同时打开两个有认证码的页面,后打开的页面上的认证码,会覆盖掉前一个的认证码,。这次要设计一个稳定安全、可扩展和性能较高的认证码系统。

接口定义

前台脚本

 

1GetRenZhengHtml()

返回Html脚本,包括一个隐含的Input和一个图片链接,图片有Java的Servlet生成。

例如:

       <input type=”hidden” name=”renzid” id=”renzid” value=”随机生成的16位字符串”>

       <img onclick=”ReIntiRenZheng(this)” src=” servlet/RandImageServlet?id=随机生成的16位字符串”>

2ReIntiRenZheng(theImg)

重新生成随机字符串,设置认证码和图片链接

一般用法:

<form ...>

<input ....>

...

<script>document.write(GetRenZhengHTML())</script>

...

</form>

后台检查认证码接口Java

类:com.cnblogs.renzhengcode.CheckRenZhengCode

Public static boolean check( renzhengidrenzcode)

验证认证码是否正确,

正确,返回true;否则,返回false

Renzhengid : 系统生成的随机16位十六进制数字认证ID

Renzcode:用户根据图片上的字符输入的认证码

实现细节

 
基本实现流程图

数据库名称RenZhengDB

表结构

字段名

名称

类型

说明

RZID

16位随机字符串

Varchar2(16)

作为钥匙匹配

RZCode

认证码

Varchar2(4)

用户输入

GENDATE

生成时间

Datatime

用于清除过期认证码

无主键,但是RZID需建立索引

存储过程

P_CreateRenZhengCode @RenZhengID char(16) @RenZhengCode char(4)

功能:直接插入一条记录,createTime为当前时间。

参数: @RenZhengID 随机产生的16位字符串

              @RenZhengCode 4位认证码

P_CheckRenZhengCode @RenZhengID char(16) @RenZhengCode char(4)

功能:根据输入的参数,查找符合的记录,有,返回1,并且删除该记录;没有,则返回0

参数:@RenZhengID 随机产生的16位字符串

              @RenZhengCode 4位认证码

返回:

如果1,则通过认证码的验证

否则 0,认证出错

数据库定时清除过期认证码的Job

初步定为,每过10分钟清一次10分钟之前的认证记录。

P_ClearOverdueRenZhengCode

参数:无

Job调用。

posted on 2008-04-01 12:32  一条辉  阅读(598)  评论(0编辑  收藏  举报