昨天听了一位大佬洋洋洒洒关于在客户端和服务端之间的数据交互确保安全性上讲了一个小时多,所得颇丰,于是决定提笔而起来写写在现在有关重要数据(如钱财交易,账户密码,隐私文件)上如何做到及时让别人拿到了你的网络请求也无法获得你的数据.
首先,我们先了解一些概念性的东西
数据信息安全的标准:
保密性(Confidenciality):确保信息在存储、使用、传输过程中不会泄漏给非授权用户或实体。
完整性(Integrity):确保信息在存储、使用、传输过程中不会被非授权用户篡改,同时还要防止授权用户对系统及信息进行不恰当的篡改,保持信息内、外部表示的一致性。
可用性(Availability):确保授权用户或实体对信息及资源的正常使用不会被异常拒绝,允许其可靠而及时地访问信息及资源。
对称加密和非对称加密:
对称加密:加解密用同一密钥,密钥维护复杂 n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。(私钥加密)
非对称加密:公钥推不出私钥,每个用户一个非对称密钥对就可以,适合于互联网传输公钥,但是加密效率低,应用于数字签名及加密。 (公钥加密)
单向加密:
单向加密(数据完整性算法):提取数据指纹,具有不可逆的特性。
常用的单向加密算法有:MD5,SHA1,SHA384,SHA512
算法的特点:
定长输出:加密后的指纹是固定长度的。
雪崩效应:原文件微小的变化都会引起指纹信息的巨大变化。
什么是Token
Token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。
简单Token的组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。
了解完这些概念性的东西,我们来看一下现在互联网公司中关于数据的加密方式:
首先将要传输的token(也就是数据)通过md5转换成一段不可逆的字符串(单向加密算法),然后再在这段md5中加入技术人员在开发时统一约定一段字符串(确保md5的安全性),然后再加上我们将通过(RSA,DSA)某种对称加密算法将token转换成密文.
中间段在网络传输的过程中,别人拿到我们的数据是无法获取我们的数据真实内容的.
数据抵挡服务端后,先拿到token通过(RSA,DSA)某种对称加密算法转换成明文,然后将那段md5再转换成刚才的token,检测数据有没有被篡改.
如果我们的传输请求在中间被别人拿到后,多次模拟请求来攻击我们服务器:
我们能进行的保护的操作时,在服务器端设置一个约定信息(特殊标识,订单号),当我们客户端发出一个请求将这个约定信息添加在这次请求上,当服务器接受到这个请求时,完成该请求进行的操作后,就将这个特殊的约定信息消去,如果再收到给请求的信息,服务器就会置之不理.