自己构建的一个WEB安全验证机制
来源:互联网 发布:怎么画适合的眉毛知乎 编辑:程序博客网 时间:2024/04/29 20:10
声明:本CSDN博客中的所有文章均为本人原创 请勿转载
在WEB应用程序的设计中,一般的用户凭据标识存储于SESSION中。但是,受应用程序稳定性,网络环境,和IIS系统的稳定性等复杂环境影响。常常发会发生SESSION突然无故丢失的现象。比如当用户登陆后正在进行一项填写麻烦的提交时,突然页面转到了登陆页。这种现象极大的防碍了用户的使用体验。因此,我设计了一种将某些标识信息存储于COOKIES客户端中的方法。(如果用户禁用COOKIES,也可存储于其它地方)。一旦SESSION验证失败。即可从客户端提取用户的凭据。而不需要用户重新登陆。
用户的用户名和密码等敏感信息不能以明文方式存储于客户端。因为伪造,盗窃,监听等安全威胁时刻不会松懈。因此,我设计了一种动态加密算法。这种算法,不会将用户名,密码存在客户端,但却存储一些能够标识用户的加密信息。以提交到服务器来恢复SEESION操作。更重要的是,这种加密在当前的技术情况下几乎无法被破解。
基本标识信息:
首先,能够标识用户的基本信息的在本次设计中有以下三项:用户名。网卡(或IP),用户ID,加密时间。当然,你可以自定义你将要存储于客户端的验证信息。下面将说明,这种基本信息的选择原则及目地。
唯一主机标识:(网卡,IP)用于在下次请求中验证是否是来自同一台主机。这将在一定程度阻挡COOKIES被盗窃,防止从另一台机器登陆。
用户名:验证用户的合法性。根据这一信息,我们可以查询用户数据表以确定该用户名是否是有效的,这一措施在一定程度上加大了仿造难度。同时,验证成功后,根据用户名或用户ID将恢复SESSION,甚至密码。
用户ID:和用户名的作用一样,但是,它是给伪造提供了一道更高的屏障。数据提交后,用户ID必须和存储的用户名一致。否则将验证失败。
另外,还有一种在服务器端的措施。那就是在服务器端生成的KEY文件中的过期时间。对一般用户,过期时间默认为1个小时,因此,一个小时后,这一凭据将失效。阻止了长期猜解。
动态加密原理:
事实上,当你使用下面的加密时,会感觉上面的措施是完全多余的,将用户名和密码直接通过下面加密存放在客户端都是安全的。因为下面采用一种“动态随机”加密,这种方式谁也无法确定其加密过程。对于想解密的人,根本就找不到解密的依据。“对称”和“非对称”两种加密两种选择,更增加了难度,因此这种方式的破解如果没有KEY文件,将几乎是一件不可能的事。分析它的难度,将不比步行出银河系更轻松。
加密原理概述:
加密的目标您选择的信息。以我选择的为例:用户名,网卡,用户ID,时间。
首先将这些信息(可无序)放在几个队列中。
用户名(U)
网卡(N)
用户ID(D)
时间(T)
队列1:admin
队列2:N1
队列3:36
队列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$*dl10。23wfJo
第四步:非对称加密。这一步将向生成的字符串中加入一些无意义的字符。以任意长度来增加破解难度。用随机数产生的字符随机插入加密字符中。但这一过程序必须控制好索引。
KEY 文档格式
编号
NS-USE-CA2359
过期日期:
2010-5-25
行号
部件代号
加密方式
转换表达式
1
N(网卡)
替代
N=*
2
IP(IP)
移位
3
UN(用户名)
移位
说明:行号表示了最小的加密单位:你可以对同一个字符如“N”进行多次加密。行号只会记录最小的加密单元。更重要的一点。行号用来验证KEY文件的完整性。是否记录程序或人为原因造成某个环节的记录丢失。
编号:这是第一个关键标识。一个WEB用户对应着一个KEY。存储在用户机器上的编号和服务器上KEY文件的编号一样时,才能确定是否为解密该用户的KEY。
过期日期:这一值并没有存在于客户端。当某次请求需要解密时,首先用编号找到请求者的KEY文件,然后查看比较当前系统时间与过期时间。如果超过过期设置,那么当前KEY被作废。系统拒绝解密。
部件代号:用一个字符表示加密的字符属于那个部分。
转换表达式:(略)
解密过程相反。根据KEY文档反向操作即可。任何一步,那怕是最微小的差错都将造成解密失败。因此,该部分最严格的就是需要精确的KEY跟踪记录部分。
验证:当我们反向对当前用户请求的KEY编号文件进行解密后,得到了 用户名,IP,网卡,等信息。然后我们对存储于服务器上的信息进行对比。从而进行下一步的处理。
- 自己构建的一个WEB安全验证机制
- Java Web的安全验证机制
- 构建安全的 Web Services
- 构建安全的web访问
- 构建安全的 Web Services
- Web应用程序的安全机制
- 构建自己的Java Web框架(三)之JAVA反射机制
- 构建自己企业的邮箱验证服务
- Axis2+SOAP Header验证方法实践(基于SOAP的Web安全调用机制)
- 基于SOAP的Web安全调用机制-----Axis2+SOAP Header验证方法实践【已经试验】
- FreeBSD下构建安全的Web服务器
- FreeBSD下构建安全的Web服务器
- FreeBSD下构建安全的Web服务器
- 构建安全的Web服务器----goodloveboys
- FreeBSD下构建安全的Web服务器
- 构建更加安全的 Web 应用程序
- 构建安全的 Web Services - .net技术研究
- 构建安全的Xml Web Service系列
- 电脑用时间长了为什么会变慢!
- jQuery与Ajax的应用
- 软件界面不是艺术作品
- TextBox控件之读控制
- JasperReport Error : Byte data not found at location : flower1.png
- 自己构建的一个WEB安全验证机制
- 查询从本地到服务器的路由表状态
- 你真的理解Web2.0的标签(Tag)吗?能用好它吗?
- asp.net 实现 桌面快捷方式
- vs将freamwork打包
- 全面加速ADSL宽带速度
- document 获取坐标
- 无线路由器经常掉线怎么办?
- 汉字转拼音