01月22, 2017

浅谈用户登录

有一天火麒麟后台忽然不好使了,由于公司内网对阿里云的IP没办法访问,所以没办法,我回家登上数据库,发现动态的修改的密码,也是不能登陆的。。。于是就登陆的这一逻辑追查了下去,当然最后问题肯定是解决了,在这里分享给大家。 在火麒麟中,登陆密码安全验证,会先在前端页面中做一个简单的长度和是否为简单密码的js验证,然后通过md5加密后,将用户名和密码传到node服务端,服务端会拿到post来的用户登录的用户名和密码,通过require phpass node包,对密码进行二次加密。

alt

接下来我们详细说说,服务端的二次加密究竟都做了哪些事情。

首先服务端拿到用户的密码之后会进行加密处理,典型的加密算法MD5SHA1(SHA1在2005年被发现不再安全,一直到2010年,许多组织推荐由SHA2,SHA3来替代SHA1,到2017年微软,谷歌等公司都声明他们的浏览器将不再支持SHA1安全认证)。而散列(也就是加密)后的值一般是无法通过特定算法得到原始字段的,但是当一些用户的密码为简单密码如:123456时,当黑客拿到数据库数据后,是很容易在短时间内通过破解表得到原始值,比如通过一个大型的彩虹表来搜索相应的md5值。

所以引入加盐算法。

盐(Salt)

在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。


加盐的实现过程通常是在需要散列的字段的特定位置增加特定的字符,打乱原始的字符串,使其生成的散列结果产生变化。这样一来,即使拿到数据库,也不能轻易的通过破解简单密码的方式来破解加密算法。

注意我这里说的是不能轻易破解,并不是完全安全,也就是说也是有破解的风险,只不过被破解的系数极低,比如数据库中有10W条数据,数据字典里有600W条数据,加盐散列后的总量四10W*600W,破解的概率估计比中彩票的概率小多了。

那在实际的项目中,加盐算法通常是核心算法,一旦项目上线,有用户注册后,就不可以修改了,否则会导致已经注册过得用户一直提示密码错误❌,同时,当然颜(盐)值也不一定非要在数据的最前面或最后面,也可能拆分开在中间插入,越是灵活被破解的难度就越大。

本文链接:https://www.imwineki.cn/post/login.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。