在开发微信小程序的时候,开始关注到用户密码安全这方面的问题。这篇文章主要记录一下所了解到的一些知识。
微信小程序授权很奇葩?
下面的链接是微信小程序获取用户信息的时候做的授权处理
https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
刚开始觉得这种授权方式很麻烦,现在认为其方法非常值得学习。这种授权模式有一个特定的名词,OAuth,最新版本是OAuth 2.0
什么是OAuth?
下面链接是关于oauth的授权方式介绍,本文不做详细介绍。
https://tools.ietf.org/html/rfc6749#page-4(难啃,但是偶尔啃一下可以涨姿势)
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html(容易啃)
很多网站都支持QQ、微信、新浪的授权登录,详细可以去参考一下各自的授权接入文档。
http://wiki.open.qq.com/wiki/mobile/OAuth2.0%E7%AE%80%E4%BB%8B
微信开放平台、QQ开放平台和百度开放平台等都是一种oauth的授权方式。
回看刚接触互联网的时候,大多数网站都有账号和密码登录验证功能,每个网站都有一套账号密码系统,到现在很多网站都支持大平台的授权,比如支持QQ、微信、新浪的授权登录。授权的方式可能有变化,但是授权的本质一直都没有变化,都是对于敏感数据的保护。
大部分的在线登录模式都是如此:
B网站触发授权请求–》提交到服务器授权接口–》用户在第三方应用平台授权获取B网站访问用户的部分信息,例如OpenId,同时生成Token–》返回授权信息–》获得授权后,网站可以根据OpenId对用户进行区分,从而提供特定服务,也可以通过Token访问第三方平台的部分信息–》用户可以访问这个网站的个人敏感数据
OAuth比较常见的是大厂的授权,比方github、qq和微信等,小厂的OAuth授权比较少见。毕竟大厂的用户群体大,保密措施做得也比较好,这是前提。
没有OAuth的情况下怎么做?
如果我的产品没有接入大厂的OAuth,还是要打造自己的账户密码系统,怎么办?
用户密码属于敏感数据,如果被拖库或者被恶意访问,对于用户来说是非常不好的。
在微信的开放平台了解到一个词,加盐hash,请看一则讨论
https://www.zhihu.com/question/20299384
感想:
密码不能明文存放,加盐hash是比较好的做法
还是那句话,通信一定要带ssl
里面一个答案提到的【随机盐】是一个很好的想法
相信看完这则讨论会有自己的一些看法。
ps:具体到个人,最好还是避免用同一套账户密码,小网站的账号密码泄露风险比大厂的大得多,我就试过在一个小网站注册的时候用了微博的账号密码,结果不久微博就被盗了,后来我都是区分对待的,不能用同一套密码,切记。