几乎所有项目都会牵涉到用户敏感信息的传输和存储,比如之前爆出github 用户密码是明文存储的-_-#,对于这些我们应该怎么处理呢?
这分为两个阶段:传输和存储。
传输,想到的应该是https协议,这没问题,而且基本都会这么做,简单的说,https协议就是会对传输的数据进行加密,防止中途被监听,篡改,伪造身份,比如你用https传输用户账户号和密码,但这个就真的安全了吗?
当然不,这里有一个点,那就是https协议,是基于“证书可靠”来的,那如果说这证书是伪造的呢?那它就可以破解你传输的内容了,这就是中间人攻击,fidder 抓包就是如此,那这怎么办?
把敏感信息加密就好了。加密是个好事,那选择哪种方式加密?md5,sha?一般很多都用的md5,但其实这个效率高,而且很容易暴力破解,黑客可以用“彩虹表”去暴力破解(感兴趣,后面可以单开章节讲),即使你md5多次,还是会在短时间内被破解,那sha呢?也一样的。那这又怎么办?
增加破解的成本(区块链就是如此,比如修改某一区块数据,会差不多跟全世界一半的矿机竞争,费时费力的事)。对用户信息进行非对称加密,比如RSA算法(一般可破解到756位,但通常RSA都是1024位,所以可以目前说安全),也即是前端传输时,对敏感信息进行rsa加密(前端有该库,可git查找,百度密码传输也是rsa加了密的),后端再解密。这样即使出现中间人攻击,它也不会解出敏感信息原内容。
传输搞定了,那存储呢?存储到数据库,选用还是得用有成本的,如果是一般的md5方式,如果有人进入了数据库还是可以破解,所以可以加“盐”,salt,来提高成本,比如bcrypt (就是加了随机数在原内容里,然后多次加密,提高时间成本,一般php需要700ms),pkd。或者自己编写加密方式。然后,这就算搞定了。
来个总结吧。针对用户敏感信息,为了保证安全性,采取方式如下:
1,传输协议使用https
2,传输时对敏感信息,RSA加密,防止中间人攻击
3,后端存储时,采用自定义加密方式或者bcrypt 或者pkd方式加密存储。
点个赞吧……
ps:我搞区块链了,后续会更新这类章节。




