自己构建的一个WEB安全验证机制

声明:本CSDN博客中的所有文章均为本人原创 请勿转载

WEB应用程序的设计中,一般的用户凭据标识存储于SESSION中。但是,受应用程序稳定性,网络环境,和IIS系统的稳定性等复杂环境影响。常常发会发生SESSION突然无故丢失的现象。比如当用户登陆后正在进行一项填写麻烦的提交时,突然页面转到了登陆页。这种现象极大的防碍了用户的使用体验。因此,我设计了一种将某些标识信息存储于COOKIES客户端中的方法。(如果用户禁用COOKIES,也可存储于其它地方)。一旦SESSION验证失败。即可从客户端提取用户的凭据。而不需要用户重新登陆。

 

用户的用户名和密码等敏感信息不能以明文方式存储于客户端。因为伪造,盗窃,监听等安全威胁时刻不会松懈。因此,我设计了一种动态加密算法。这种算法,不会将用户名,密码存在客户端,但却存储一些能够标识用户的加密信息。以提交到服务器来恢复SEESION操作。更重要的是,这种加密在当前的技术情况下几乎无法被破解。

 

基本标识信息:

 首先,能够标识用户的基本信息的在本次设计中有以下三项:用户名。网卡(或IP),用户ID,加密时间。当然,你可以自定义你将要存储于客户端的验证信息。下面将说明,这种基本信息的选择原则及目地。

  唯一主机标识:(网卡,IP)用于在下次请求中验证是否是来自同一台主机。这将在一定程度阻挡COOKIES被盗窃,防止从另一台机器登陆。

  用户名:验证用户的合法性。根据这一信息,我们可以查询用户数据表以确定该用户名是否是有效的,这一措施在一定程度上加大了仿造难度。同时,验证成功后,根据用户名或用户ID将恢复SESSION,甚至密码。

 用户ID:和用户名的作用一样,但是,它是给伪造提供了一道更高的屏障。数据提交后,用户ID必须和存储的用户名一致。否则将验证失败。

 

另外,还有一种在服务器端的措施。那就是在服务器端生成的KEY文件中的过期时间。对一般用户,过期时间默认为1个小时,因此,一个小时后,这一凭据将失效。阻止了长期猜解。

 

动态加密原理:

事实上,当你使用下面的加密时,会感觉上面的措施是完全多余的,将用户名和密码直接通过下面加密存放在客户端都是安全的。因为下面采用一种“动态随机”加密,这种方式谁也无法确定其加密过程。对于想解密的人,根本就找不到解密的依据。“对称”和“非对称”两种加密两种选择,更增加了难度,因此这种方式的破解如果没有KEY文件,将几乎是一件不可能的事。分析它的难度,将不比步行出银河系更轻松。

加密原理概述:

  加密的目标您选择的信息。以我选择的为例:用户名,网卡,用户ID,时间。

首先将这些信息(可无序)放在几个队列中。

 

用户名(U

网卡(N

用户IDD

时间(T

队列1admin

队列2N1

队列336

队列4 2010-5-9

 

然后应用程序中有一处随机引擎。它会在你指定的范围产生一个随机项。假如此时,产生的项是对列2 从队列2中取出第一个字符,第一次是“N”。(生成KEY的程序会记录随机过程,它会记录如下内容:第一次,取N(表示网卡数据),下文KEY文件格式中有说明)

 接着,该引擎重复上面的工作,直到得到一个融合了上面基本信息的一个无序字符串。

admin N136 2010-5-9 经过该步之后可能变为:-ai13d6N010m5-29n

第二步,随机变换方式。首先这一部分将对上面的字符串逐一进行操作。这里将会确定对“N”如何变换。变换方式中有以下几种:

假设已经成的字符串为:43f$*dl10 N23wfJo。此时接下来的字符是N

1.                  翻转:用ASCI进行取反。得到的字符。

2.                  移位:用+-进行位置调动。格式为。原字符->移动位数。“->”和“<-”表示向左还向右。比如N<-4。那么表示向左移动4位。结果如:43f$*Ndl10 23wfJo .N->4 就是43f$*dl10 23wfNJo

3.                  代替:表示用某一值代替当前的值。格式为。原字符=目标字符。如N=3。那么结果为:43f$*dl10 323wfJo

  4      换位:就是与当前字符串中的某个随机字符进行调换位置:格式如:原字符~位置。如:N~+3,那么,结果为:43f$*d N10 l 23wfJo. 在程序中。以右1字符为结果。

第三步:如果变换方式为替换,那么将取出的字符进行替换操作。应用程序中定义了一个字符范围,如“a-Z 1-0还有一些特殊字符串“*,&,!,~[,’/,?<”等。这里随机引擎第二次从范围字符库中取出一个字符。假设随机取出了“。”号。那么,代替操作表达式就为:N=0

43f$*dl10 N23wfJo就会变为:43f$*dl1023wfJo

 

 

第四步:非对称加密。这一步将向生成的字符串中加入一些无意义的字符。以任意长度来增加破解难度。用随机数产生的字符随机插入加密字符中。但这一过程序必须控制好索引。

 

KEY 文档格式

编号

NS-USE-CA2359

过期日期:

2010-5-25

行号

部件代号

加密方式

转换表达式

 

 

1

N(网卡)

替代

N=*

 

 

2

IPIP

移位

 

 

 

3

UN(用户名)

移位

 

 

 

说明:行号表示了最小的加密单位:你可以对同一个字符如“N”进行多次加密。行号只会记录最小的加密单元。更重要的一点。行号用来验证KEY文件的完整性。是否记录程序或人为原因造成某个环节的记录丢失。

编号:这是第一个关键标识。一个WEB用户对应着一个KEY。存储在用户机器上的编号和服务器上KEY文件的编号一样时,才能确定是否为解密该用户的KEY

过期日期:这一值并没有存在于客户端。当某次请求需要解密时,首先用编号找到请求者的KEY文件,然后查看比较当前系统时间与过期时间。如果超过过期设置,那么当前KEY被作废。系统拒绝解密。

部件代号:用一个字符表示加密的字符属于那个部分。

转换表达式:(略)

                                                                                                      

解密过程相反。根据KEY文档反向操作即可。任何一步,那怕是最微小的差错都将造成解密失败。因此,该部分最严格的就是需要精确的KEY跟踪记录部分。

 

验证:当我们反向对当前用户请求的KEY编号文件进行解密后,得到了 用户名,IP,网卡,等信息。然后我们对存储于服务器上的信息进行对比。从而进行下一步的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值