MD5如何在网络环境中保证数据接口的安全

安全是一个比较泛的概念

我个人比较习惯从三个维度分别论述数据的安全:

1.数据接口访问权限是否可以控制

2.数据接口提供的数据内容是否能保证不被他人获取

3.数据完整性是否可以保证

1.访问权限是否可以控制?

    一般客户端对接服务器,接口权限控制的模型是基于session或token,token和sessionId在网络中传输的过程中,若没有其他安全性的保证,被他人窃取token或sessionId即可获取到该用户的访问权限,如果我们意图想保护token或sessionId,对token和sessionId做Md5传输,实际上完全多此一举,他人如果拿到Md5(token)一样可以获得该用户的权限(这个论述略显幼稚,但是其实我也见过不少人是这么用MD5的),此时我们进一步想,如果在让客户端每次请求时对Token+时间戳后再做MD5,并把MD5和时间戳传送给服务端,服务端接收到请求后先对时间戳做校验,再对MD5做校验,这样就能保证暴露在网络中的MD5值 只在一段时间内有效,一定程度上通过MD5提升了权限控制的能力。

     如果是服务器对接服务器,道理和上面类似,双方约定一个Token,并使用这个Token进行交互,由于这个Token一般不会发生什么变化,所以我们更应该保护这个Token不被窃取(和C/S略有不同,因为C/S模型的token是动态变化的)。保护的方式和上述论述一致,我们可以对这个token加时间戳 再做MD5,保证一个权限认证符号只在某个时间内有效,就算被窃取(当然我之前也有见过有人加随机数再做MD5的,个人感觉也并没有什么用,因为完全可以用同一个随机数进行反复请求)。

     如上就是MD5对访问权限控制能力的提升(个人见解)。

2.数据接口提供的数据内容是否能保证不被他人获取?

      MD5并不能保证数据内容不被他人获取。

3.数据完整性是否可以保证?

      如果仅仅是为了防范因为网络问题导致的丢包等原因,这类问题如果我们对数据做MD5,并作为一个额外的参数进行传递,在获取到数据后再做MD5校验,可以解决这类问题,但是这种方式并不能解决数据被篡改的问题(我个人把数据篡改的问题归纳与数据完整性,不知道对不对),如果有人为因素恶意对数据进行篡改,那他也完全有能力再对数据做一次MD5,这样简单的MD5就不能解决这类问题,(我们可以提供另一个页面专门用于查看MD5,用户获取到数据文件后,再去另一个页面对比MD5是一种解决的方式),另一种方式就是通过约定一个盐值,对数据加盐后MD5,不但可以保证防止丢包等问题,也可以防止数据内容被篡改的问题。这个加盐后MD5,可以认为是对数据的签名。这个盐值通过邮箱或线下的方式交换。 缺点就是如果一方的盐值泄露,就会导致数据签名失效。(这个时候就能看出RSA私钥做签名的好处了)

猜你喜欢

转载自blog.csdn.net/weixin_40585816/article/details/80953868