- 最近无意间没事的时候,听了一节公开课,受益匪浅。防止以后忘记,所以在此记录一下。
app的安全性一直是比较重点的话题。一个app如果没有经过深思熟虑的安全考察,一旦被黑客攻克,那么后果将不堪设想。
一般没有绝对安全的app,我们只能设定为相对安全。那么,一个app的相对安全是指的什么呢?
app被破解的成本 > app所产生的利益
那么此时,就说明,我们的app是相对安全的。
例如,我们app的登录安全性问题。
我们都知道app的登录密码需要加密,那么,当前的加密方式有散列加密,对称加密,非对称加密等等。
在过去做app加密的时候,我们通常直接将app的密码直接保存在服务器,然后有找回密码的功能,其实这个是非常不安全的,如果我们的app有几十万用户的时候,黑客一旦破解了我们的服务器,那么我们用户的密码就会暴露在黑客的眼下,造成的损失将是我们无法估量的。
所以,一般都会对app进行MD5加密,然后将其保存在服务器,因为MD5是一种不可逆的加密方式,如果黑客破解,他们也无法得到想要的结果。但是,现在竟有公司或者某个地方统计每个数字或者字符以MD5的方式,数以亿万级的保存这些东西,然后暴力破解我们的这些数据。实在让人难以置信。
- 所以,开发者为了防止这些发生,就对当前的密码进行加盐,并把加盐的一些东西放在当前app里面。但是这也是非常不安全的,现在逆向技术已经很深入了,破壳然后破解你app里面的加盐常量也只是时间问题,所以,这必然也是不行的。况且最危险的人还是开发者,知道这个加盐变量,无疑对公司造成一定的影响。
- 随后,又有人发现了一些技巧,就是利用随机数来随机生成MD5,这样就能防止开发者或者暴露的全部对象。常见的有HMAC加密。思路是:
服务器根据用户名(userid)随意创建一个key,然后根据这个key返回给客户端,客户端根据这个key给每个用户的密码进行HMAC加密,随后根据这个加密匹配服务器即可。
这样做,即使黑客破解了,也只是破解了一个用户,其他用户也不会受到影响。
- 但是此时,又有一个问题,很多人完全都不需要你这个密码是什么,直接抓包或者破解拿到你这个md5的串,然后根据这个串请求服务器,这样就相当于模拟登陆了。此时也相当于获取了用户的信息。解决方法:
根据这个方式,我们在加密的字符串中加上时间 当前年月日, 当然这个时间是从服务器那边返回的,然后根据这个时间去拼接字符串,
随后再进行MD5加密,然后去请求服务器。服务器根据这个串在2分钟或者设定时间以内去遍历然后验证。这样就避免了黑客早早的拿到
我们的这个串一直作请求。
以上就是听取公开课的重点内容,还是比较有益处的。如果你有更好的防范方法,欢迎给我留言一起交流。