开放式API接口的安全处理

开放式API接口的安全处理

1. 开放API接口安全问题介绍

未进行安全处理的开放API接口存在的问题,我们可通过如下三种场景得到大致的了解和认识:

1.1 场景一

A公司开发的开放API未对接口进行安全控制,有黑客通过爬虫程序调用开放API查询客户信息的接口,由于没有安全验证,A公司的客户数据通过客户信息查询API流出,竞争公司拥有了这批客户数据,对A公司造成损失。

1.2 场景二

A公司开发的开放API未对接口进行防篡改控制,有客户购买价值1万元的产品,现有黑客通过技术手段,对客户提交的表单进行篡改,将1万元的价格改成100元,对公司造成了经济损失。

1.3 场景三

A公司开发的开放API未进行接口安全控制,有黑客截取了客户的用户名,密码信息。黑客用客户的用户名,密码登录,查阅客户的相关隐私信息,盗刷了客户的信用卡,给客户造成了损失。


这三种场景对公司以及客户造成损失的原因都是因为A公司的开放API未对数据和用户信息进行安全验证,这三种场景也正反映了普遍开放式API存在以下三种安全问题:

一、 用户密码被截取

二、 表单数据易被篡改

三、 业务数据易泄露

2. 开放API接口安全问题解决方案

针对开放API平台存在的上述安全问题,我们分别可以使用非对称加密,MD5摘要,以及令牌机制进行预防和阻击。

2.1 非对称加密

2.1.1 什么是非对称加密

非对称加密是一种加密算法, 区别于只有一个密钥文件的对称加密算法,非对称加密有两个密钥,一个公钥,一个私钥。公钥公开,私钥保密,即使报文或者公钥被截取由于黑客不掌握私钥,也不会造成任何影响。

我们为了解决用户敏感信息被盗用的安全问题,使用了RSA非对称加密技术,该加密技术公布于1978年,由创始人Ron Rivest,Adi Shamir,Leonard Adleman一起提出,并以他们三人的姓氏开头字母命名。

RSA是目前最具有影响力的加密算法,它被推荐为加密数据的标准,因为RSA能够抵御目前已知的大多数密码攻击。

2.1.2 非对称加密的加密与解密流程

开放API平台生成公钥和私钥,并将公钥对外公布,提供给需要对接API的人员。对接API的人员将用户的数据使用公钥进行加密传输,即使有黑客使用抓包工具截取到了报文,但是由于解密用户数据只能使用API平台自己拥有的私钥才能解密,所以即使报文数据泄露,由于没有钥匙能打开传输的信息,黑客获得了报文也无可奈何,非对称加密解决了,用户传输用户名,密码等敏感信息泄露的问题。其流程图如图1所示。


图1 RSA加密解密流程图



2.1.3 RSA与HTTPS的对比

如果条件允许,建议设计开放api接口都使用HTTPS协议进行数据传输。使用HTTPS传输相比与RSA加密更安全 。HTTPS顾名思义,即安全的HTTP,HTTPS的主要作用是,确认双方的身份,和建立安全通道,保证传输数据的安全。HTTPS既用到了非对称加密,也用到对称加密。相较RSA加密 ,RSA加密实现的,HTTPS都能实现。但是HTTPS存在,维护成本高,服务器开销大,需要购买证书,性能相对低的问题,所以基于成本的考虑不能使用HTTPS的,使用RSA加密算法是最优的选择。


2.2 MD5摘要

2.2.1 什么是MD5

MD5的全称Message-Digest Algorithm 5(信息摘要算法5),它的作用是对一段任意的字符串信息生成信息摘要(Message-Digest)。因为其算法的不可逆的特点,MD5 一般用来储存用户登陆的密码,或者对比信息是否一致。MD5目前并不能被真正意义上破解,所谓的破解只是通过数据量很大的彩虹表进行碰撞,相当于有一个存有大量数据的表,存了种种字符串对应的MD5字符串,破解的时候,用加密好的MD5 字符串到这个巨大的表里进行检索,由于这个表的数据量非常之大,检索的时间也将很长,即使使用反推法去尝试密码,这也是一个需要耗费很长时间的工作。所以相对而言,MD5还是很安全的加密算法。

使用MD5防止篡改的设计思路,正是利用MD5这样的特性,对通过接口传输的数据进行两次MD5加密,一次由调用方加密,一次由API数据接收方加密,再通过对比两次加密的数据结果是否一致,从而起到防数据篡改的目的。


2.2.2 如何使用MD5

一般而言,API设计者需要在对外提供的接口文档中约定MD5加密的字段,以及顺序。API接口调用方通过文档中约定的顺序进行MD5加密,同样API后台也需要根据约定的顺序进行加密,这样才有对比的意义。如果接收到的MD5摘要和获取参数生成的MD5摘要一致,则可以确定数据未被篡改,如果不一致,排除是接口调用方操作失误后,基本可以确定数据被篡改,从而拒绝处理这批数据。

例如:A公司对外提供了一个客户下订单的接口,该接口共有两个参数,产品编码,和购买数量,产品编码可以确定客户购买的产品信息。考虑到数据被篡改的风险,A公司可以加入一个MD5摘要参数。并规定调用接口方,按照产品编码加上购买数量进行MD5 摘要。如下:

摘要文件=MD5(产品编码+购买数量)

接口调用方根据A公司要求,需要传入3个参数,产品编码,购买数量和MD5摘要。

A公司获取到接口调用方传入的参数,同样按照产品编码加上购买数量进行MD5 摘要。并对比自己生成的摘要文件和调用方传入的摘要文件是否相等。若不相等,则说明数据有被篡改的风险,A公司应当放弃该笔接口请求。


2.3 令牌鉴权

2.3.1 什么叫令牌

令牌可以理解为通行证,开放API接口,暴露在公网之后就相当于一个敞开大门的豪宅一样,所有的人都可以随意进出,对于豪宅内的财产而言,这是很不安全的。这时候就需要一个保安查看进出人员的通行证,只有获得通行许可的人员可以进出,没有通行证的人员一律会被拦在大门外,不得进入。

同样对于开放API接口而言,如果没有令牌机制,所有人都可以通过接口获取数据,造成平台数据的流失,给公司和客户造成不可估量的损失。所以使用令牌进行鉴权是非常有必要的。

2.3.2 令牌的生成机制

用户在进行登录之后,开放API接口服务器按照一定的规则,生成不重复的一组字符串作为登陆人的令牌,并将令牌作为KEY放置于REDIS缓存服务器中.VALUE则存放的是登陆用户的基本信息等.并需要设置token的失效时间,具体失效时间业务系统可以根据自身的业务具体情况具体分析.

2.3.3 令牌的校验

开放API调用方需要在每一次接口调用中都要携带令牌.服务器则在过滤器中进行令牌的校验,包含校验令牌是否存在,令牌是否已经过期等等.如果令牌在REDIS缓存服务器中不存在,或者令牌已经过期,则接口服务器直接返回异常信息,由接口调用方进行捕获,强制客户重新登陆获取新的令牌,再进行后续操作。令牌的校验流程如图2所示。




图2 令牌校验流程图


3. 结语

随着硬件设备,分布式计算能力的不断提升,大数据处理能力的完善,也许现在还算安全的防护措施,在不久将来可就会变得不堪一击,数据安全的攻防势必是一场持久战,只有不断总结,改进,才能极大可能保护核心数据,和客户的权益。



如果童鞋们在编程道路上有什么困惑欢迎大家加入互联网技术交流圈,这里有一群爱分享的年轻人。正在跳转

编辑于 2018-02-24