解决接口安全性的几种方案

195 阅读3分钟

1.数据加密

当我们使用的是http协议,因为它是明文传输的,不安全,比如登录时传递用户名密码。

对称加密:加密和解密使用相同密钥的加密算法。(如AES)来加解密,或者哈希算法处理(如MD5)。

image.png

非对称加密:非对称加密算法需要两个密钥(公开密钥和私有密钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。(如RSA或者SM2),公钥加密,私钥解密。

image.png

如果你想对所有字段都加密的话,一般都推荐使用https协议。https其实就是在http和tcp之间添加一层加密层SSL。

2.接口签名

数据在进行网络传输过程中,很容易被抓包。如果使用的是http协议,因为它是明文传输的,很容易篡改我们发送的数据。所以需要对数据签名验证。

数据加签:用Hash算法(如MD5,或者SHA-256)把原始请求参数生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名sign(这个过程就是加签)。通常来说呢,请求方会把数字签名和报文原文一并发送给接收方。

签名流程: image.png

签名规则:

1、线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret

2、加入timestamp(时间戳) ,5分钟内数据有效

3、加入临时流水号nonce(防止重复提交),至少为10位。针对查询接口,流水号只用于日志落地,便于后期日志核查。针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求

4、加入签名字段signature,所有数据的签名信息。

把请求参数,按照一定规则,利用hash算法+加密算法生成一个唯一标签sign验签的话,就是把请求参数按照相同的规则处理,再用相同的hash算法,和对应的密钥解密处理,以对比这个签名是否一致。(即拼接成一个字符串,然后做md5不可逆加密)

3.token机制

token的授权认证方案:用户在客户端输入用户名和密码,点击登录后,服务器会校验密码成功,会给客户端返回一个唯一值token,并将token以键值对的形式存放在缓存(一般是Redis)中。后续客户端对需要授权模块的所有操作都要带上这个token,服务器端接收到请求后,先进行token验证,如果token存在,才表明是合法请求

image.png

token也不是安全的,通常需要注意以下几点:

  • token设置合理的有效期
  • 使用https协议
  • token可以再次加密
  • 如果访问的是敏感信息,单纯加token是不够的,通常会再配置白名单

4.数据脱敏掩码

对于密码,或者手机号、身份证这些敏感信息,一般都需要脱敏掩码再展示的,如果是密码,还需要加密再保存到数据库。