用户注册登录授权模式

作者-上善若水

首先介绍我所考虑使用的MD5 + Salt方案的具体设计:

数据库中不应该存储密码明码应该是一个基本安全常识,通常的方案是采用MD5算法对密码进行Hash,再存入数据库,从而避免数据库泄露之后,用户的敏感数据也随之泄露,但是随着时间发展,人们存储的MD5的字典已经越来越庞大,对于一些弱口令(例如12345678、passw0d,不足够长的纯数字或字母串),即便是在不可逆算法MD5 Hash过后再入库,对于拥有字典的人而言,仍然与明文无异,对于有经验的人而言,可能看到25d55ad283aa400af464c76d713c07ad,脑子里就已经浮现了12345678这串数字了。于是对密码加Salt的想法就孕育而生,如果说用户自己设定的密码很简单,那么不妨让系统来帮他进行加强,而Salt就是在原来的密码上加的那一点“佐料”,只要能够保证无论曾经的密码多么简单,只要加完Salt之后,字典中就无法直接找到这个Hash对应的原文,那么这个方案就算是成功了。

首先,用户数据库我们需要两个字段:

psw_hash:用来存储Hash过后的密码 psw_salt:用来存储帮助Hash的的附加串

在加入这两个字段后,我们来考虑两个情景:

第一个情景就是注册(或是修改密码)的时候, 第二个情景是验证的时候,这两个情景的流程如下图所示:

左侧是情景一的图示,右侧是情景二的图示,由于在数据库中不存储密码的明文,同时采用了每个用户一种单独Salt的方案,在数据库被攻破后,窃密者必须付出极大的成本才可能破解出用户的密码明文,并且方法只能是为每种Salt都重新建立一份字典,在这样的成本下,我们可以认为这种方案是非常安全的。

基于laravel做password+salt验证算法可参考http://blueve.me/archives/898?utm_source=tuicool&utm_medium=referral

你可能感兴趣的:(用户注册登录授权模式)