在使用某平台的时候,使用修改密码功能,赫然发现我的当前密码被明文的显示在页面上,很友好的提醒我:你现在密码是什么,而且不需要我输入当前密码,直接输入新密码。
我们把问题想深一些,对于那些【是不是需要提示】,【更应该让用户自己输入】这类关于交互的讨论我们暂时略过。
这个功能其实从本质上反映了一个问题:这个平台秘钥安全性其实就是一层纸。
此平台的密码竟然可以通过密钥解密出来
他们技术是如上回复我的。
几个原则
- 网站被攻破后拿到的密码无法一眼看出来密码;
- 网站被攻破后拿到的密码无法简单解密出来;
- 网站被攻破后拿到的密码无法简单暴力破解出来;
- 网站密码不能被网站的内部人员得知并获取;
他们这样做让我一身冷汗,如果我是他们公司中有生产权限的人,或者管理员权限的人,我轻轻松松就能拿到所有客户的密码。简直就是神一般的存在。
简单而言,存储bcrypt, scrypt等算法输出的内容,不要用salted hash的方式存储密码,不要用加密的方式存储密码,当然,更不要明文存储。
参考文章:
https://www.zhihu.com/question/20479856
http://blog.jianguoyun.com/?p=438
http://marc-stevens.nl/research/md5-1block-collision/
https://en.wikipedia.org/wiki/Rainbow_table