干货分享6:HTTP/HTTPS密码防止泄密的新方案

王志勇 发表于 2018年08月25日 10:20

在项目里准备用这个设计的新方案。现在各大网站越来越多地使用HTTPS,使用HTTPS主要是防止密码被窃取。如果在登录时,就已经使用JavaScript经过一定的规则,将密码的<input>的值,经过加密,或者增加一些随机的乱码,即使此明文值被获取,也无法猜出实际的密码。经过这样的方案,HTTP/HTTPS的密码安全级别增加了很多。

示例:用户输入的密码是abc,加密后的post的密码可能是W9g#fyx@0t。

步骤提示:
登录提交时,在<form></form>内的所有表单都会被发送,因此用户输入密码的那个<input>框(如表单框A),要放置在<form></form>之外,这个“表单框A”需要写入<input name=aaa onkeyup=abc();>。自定义函数abc()的内容为:在<form></form>之内建立一个<input name=password>表单框B,并将这个表单框B隐藏。abc()这样写,function abc(){document.all.password.value='……';},其中省略号的内容为关键内容,是从document.all.aaa.value获取值后,然后给它改变规则、或增加乱码。

这样,由于表单A,即<input name=aaa onkeyup=abc();>这个表单是在<form></form>之外,所以提交时它不会被发送,发送的是经过加密的密码,即使被截获,也无法知道实际密码。

表单框B必须隐藏,因为如果不隐藏,用户会同时看到2个密码框,并且表单框B的密码是经过加密的密码,会比原密码长很多。

服务器端收到密码后,并不存储用户的实际明文密码,而将密码再次加密,有点类似于MD5加密,就像31+18=49,22+27=49这样,这个49的值即使是被恶意截取,也无法还原出原来的值(实际的规则比这个等式复杂得多)。实际上这个49的值是很难被截取的,因为如果网站是使用别人开发的公共程序,有一定的可能被攻破,但如果是全新开发的,通常被攻破的可能性无限接近于0。

经过这种加密的HTTP,理论上比没有这种加密的HTTPS还安全。

这种加密,由于只在客户端提交前做了加密,所以不会增加服务器的任何成本,增加的只是开发者的开发时间。

[2018-08-25 16:06]更新,再进阶一步

上面的表单框B,就是经过加密的客户端发送的密码,通常被截获的可能性很小,除非是一个项目到有名的程度,有人专门制作病毒,带有病毒的客户端可截获此表单。如本文在客户端的加密方法,即使截获,也很难解读、破解,完全解读、分析它至少要花费1~10年的时间,没有人会闲到做这种事。

这里再进一步加密,可将<form></form>之外的表单A这个明文密码(此密码如上所述,因为在form之外,不会发送,所以无法截获),经过在客户端加密之后,再将生成的加密之后的密码,拆分成2~4段,传给表单框B、表单框C、表单框D等等,这样更加提高安全等级。

服务器收到表单框B、C、D……的数据后,根据相应的规则重新合并、提取,再做服务器端的非明文的加密

有了这项方案,即使使用HTTP,也能安心地继续运营,因为对于流量大的站点,HTTPS确实较繁琐,高费用、影响效率。

[2018-08-26 10:47]更新:此方案今天已经在程序中完成。

0条评论:

发表评论:
名字: (*必填)
博客: (可省,仅限于Blog地址)

正文:

    记住信息? 否   回复第

直接发送Trackback

Copyright © 2017-2018 blog.emxel.com 版权所有 Powered by Arsue