0


接口安全解决方发

安全是接口安全中最重要的问题,先讲思路,后面挨个代码实现。

1、接口安全校验分析

1、Http接口是互联网各系统之间对接的重要方式之一

使用http接口,开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享,但由于http接口开放在互联网上,那么我们就需要有一定的安全措施来保证不能是随随便便就可以调用;

2、目前国内互联网公司主要采用两种做法实现接口的安全

一种是以支付等支付公司为代表的私钥公钥签名验证机制,一种是大量互联网企业都常采用的参数签名验证机制;

3、前后端分离中的接口安全

前面两种基本都是应用在服务与服务之间的传输,但是在前后端分离项目中,浏览器F12就可以清楚看到请求和响应的数据,比如登录这类的功能如何保证用户密码安全,一些敏感数据,请求和响应数据都要加密传输,如何实现?

2、接口安全几种方式

1、 完全开放的接口

有没有这样的接口,谁都可以调用,谁都可以访问,不受时间空间限制,只要能连上互联网就能调用,毫无安全可言。实话说,这样的接口我们天天都在接触,你查快递,你查天气预报,你查飞机,火车班次等,这些都是有公共的接口。我把这称之为裸奔时代。

2、接口参数加密(基础加密)

你写个接口,你只想让特定的调用方使用,你把这些调用的人叫到一个小屋子,给他们宣布说我这里有个接口只打算给你们用,我给你们每人一把钥匙,你们用的时候拿着这把钥匙即可。这把钥匙就是我上文说到的参数加密规则,有了这个规则就能调用。

如下举例:

  • 第1步: 将所有参数(除去sign本身),按参数名字母升序排序;
  • 第2步: 然后把排序后的参数按:参数1=值1&参数2=值2…&参数n=值n(这里的参数和值都是是传输参数的原始值,不是经过处理的)的方式拼接成一个字符串;
  • 第3步: 把分配给接入方的验证密钥key拼接在第2步得到的字符串后面;
  • 第4步: 计算第3步字符串的md5值,使用md5值的16进制字符串作为最终sign的的值;

比如传输的数据是:

http://www.xxx.com/interfaceidCard=110819000000000000&phone=13700000000&bankCard=6232898709123216&sign=sign_value

其中sign参数对应的sign_value就是签名的值;

第一步,拼接字符串,首先去除sign参数本身,剩下的为:

idCard=110819000000000000&realName=张三&phone=13700000000&bankCard=6232898709123216

然后按参数名字符升序排序:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=张三

第二步,然后做参数名和值的拼接,最后得到:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=张三

第三步,在上面拼接得到的字符串前加上验证密钥key,我们假设是abcdefg,得到新的字符串:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=张三&key=abcdefg

第四步,然后将这个字符串进行md5十六进制计算,假设得到的是opqrst,该值即为sign签名值;

注意:这种参数排序的方式只是其中一种方式, 就是一个规则,也可以用其他方式加密签名

3、接口参数加密+接口时效性验证

一般达到这个级别已经非常安全了

该种机制与上一种机制一样;只是在参数中新增一个时间戳,接口方验证时间戳是否在允许的时间范围内;

继上一步,你发现有不明不白的人调用你的接口,你很不爽,随即把真正需要调用接口的人又叫来,告诉他们每天给他们换一把钥匙。

和往常一样,有个别伙伴的钥匙被小偷偷走了,小偷煞费苦心,经过数天的踩点观察,准备在一个月黑风高的夜晚动手。

拿出钥匙,捣鼓了半天也无法开启你的神圣之门,因为小偷不知道你天天都在换新钥匙。

4、接口参数私钥签名公钥验签

这个级别可以说是固若金汤

这是一种更为安全的方式,它通过私钥和公钥实现接口的安全,目前互联网中主要是以支付宝为代表的公司采用这种机制(有很多开放平台也是采用这种机制);这种签名方式通过4把密钥来实现;

客户端应用私钥

客户端应用公钥

服务端应用私钥

服务端应用公钥

5、接口参数签名+Https

该方式是在第2或3种方式的基础上添加https,https需要在服务器上进行配置;

6、接口参数加密+时效性验证+私钥

达到这个级别安全性固若金汤

继上一步,你发现道高一尺魔高一丈,仍然有偷盗事情发生。咋办呢?

你打算下血本,给每个人配一把钥匙的基础上,再给每个人发个暗号,即使钥匙被小偷弄去了,小偷没有暗号,任然无法如愿,而且这样很容易定位是谁的暗号泄漏问题,找到问题根源,只需要给当前这个人换下钥匙就行了,不用大动干戈。

7、接口参数加密+时效性验证+私钥+Https

我把这个级别称之为金钟罩,世间最安全莫过于此

继上一步,我们给传输机制改为Https,这下小偷彻底懵逼了。

当然:安全是相对的,只有相对的安全,没有绝对的安全!

标签: 安全 网络

本文转载自: https://blog.csdn.net/kh6417/article/details/130887667
版权归原作者 峰晨朴朴 所有, 如有侵权,请联系我们删除。

“接口安全解决方发”的评论:

还没有评论