新闻: 服务热线:010-56153651/136-9361-0533
在线沟通
599385821
010-56153651

企业网站建设中如何让用户可以正常登录,同时不怕数据库被盗?

发布时间:2016-10-24 来源:北京思睿鸿途科技有限公司 作者:网站制作 访问量:2384

每个企业网站建站中都会设计自己的帐号系统,用户不管是通过QQ还是微信登录过来的,大多数网站建设者都是想把他们转入到自己的帐号系统,因为这样估值的时候,这个用户才是你的用户,才好把故事讲好。那这些用户名和密码该如何存储才安全呢?或者说即使被「脱裤」了,如何才能不被黑产利用呢?

1477302817850945.png

最近两年曝光的事件,发现有几个公司的密码库居然是明文存储的,也就是“果果,123456”这样的存储方式,小学生都看得懂,直接可以登录了,还谈何安全。

具体是那几个公司就不说了,以免有为他们做广告,帮助他们东山再起的嫌疑(东山再起运用了夸张的修辞手法,你懂的,我是吹了个牛逼)。

所以,问题抽象为——如何让用户可以正常登录,同时不怕数据库被盗呢?先看看如下图最原始的数据库设计。

最原始的数据库设计肯定是这样的,想都不用想,被攻破,所有用户密码就泄漏了,小明和小红所有的隐私也都泄漏了。

程序员不服输,那我不让Password字段是密码不就可以了,于是变为了这样,密码是做了MD5(MD5传送门:名词解释:时间戳、MD5、GUID)之后的密文,这样用户登录的时候输入123,后台对比Md5(123)是不是202cb****这段数据,就能证明输入正确与否了。

理论上MD5是单向的,也就是一个字符串会生成一个唯一的MD5码(有开发同学就别较真了,我知道理论上不唯一会冲突,但概率非常小,产品经理请继续认为基本唯一),这种情况下,数据库泄漏了,有风险吗?

答案是有风险,因为还有一帮程序员更聪明,发明了叫彩虹表的东西,彩虹表是把字符串和这些MD5值对应起来做了一个大数据库,也就是知道了202cb****这段数字之后,会反向查找出字符串,也就拿到了明文的密码。这个彩虹表一般都是上百个G的数据,所以用MD5或者SHA这些算法来保护密码也有漏洞。

程序员又不服,继续探索新的方法,客官注意了,我们马上进入到高潮部分,讲述如何用「加盐」来解决这个问题。

如上图所示,我们加了一个新的字段叫Salt,翻译过来就是盐,这个字段是用户注册的时候随机产生的一个字符串,所以这回我们生成数据库中的密码就是这样生成的:Md5(“123” + “jakldsfjn234jkl234jkl;123″)=6bbf7f8dd1f7dd3d7c03182620ba312f,当用户输入123的密码时,后台也用这个算法来验证是不是可以正常登录。

假设数据库又被窃取了,这个时候拿到的密码库的Password字段是两个字符串拼接的Md5值,这个时候由当前的密码会得到“123” + “jakldsfjn234jkl234jkl;123”的字符串拼接的值,但是要区分出哪些部分是密码成本是非常高的,而且这个salt可以夹杂在123这个字符串的任何位置,甚至可以将盐分开比如1前面放三个字符,2后面两个字符,剩下的接到3的结尾。

数学推理,果果也没有求证和推演过,总之时间成本会令这种破解收益非常非常小,从而保护了密码库的安全。


联系我们


地址:北京市朝阳区汤立路218号7层737

电话:010-56153651

邮箱:service@bjsrht.cn


欢迎您来到北京思睿鸿途科技有限公司,我们专注
北京网站建设、北京企业网站运维服务。