rinald_未来往事

开放API接口安全设计

系统架构

开放API接口安全校验的背景:

在未进行安全处理的开放API接口存在诸多的风险问题,如以下三种常见场景:
1、场景一
A公司开发的开放API未对接口进行安全控制,有黑客通过爬虫程序调用开放API查询客户信息的接口,由于没有安全验证,A公司的客户数据通过客户信息查询API流出,竞争公司拥有了这批客户数据,对A公司造成损失。

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

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

这三种常见未进行开放API接口校验的场景对公司以及客户造成损失的都是不可修补的,也反映了普遍开放式API接口存在的安全问题。那么,在编写开放API接口时如何保障数据传输安全性?

开放API接口安全性需要考虑的事项总结如下:
1、请求来源(身份)是否合法?
2、请求参数是否被篡改?
3、请求的唯一性(不可复制、DDOS)?

思路:

一、参数签名校验
1、接口调用方和接口提供方约定好统一的参数加解密算法
2、密钥:初始密钥(内置各应用中)、token授权密钥(从服务端获取生成,根据用户名密码或header请求头信息生成token),共同形成最终的secret通信密钥。
3、对所有需要发送的参数按特定规则进行排序,如升序

例:b=2&a=1&c=3×tamp=1533095588 排序后 a=1&b=2&c=3×tamp=1533095588

4、将排序后的参数名和参数值拼接连接为字符串

例:a1b2c3_timestamp1533095588

5、将参数与secret通信密钥混合加密生成签名字符串,(然后对加密后的字符串进行urlencode处理)

例:sign=amhIEWlsG0rVhg4ffRyfssF1Aff03cu6C6ERkFv2nDlKv811jGfWqFKrE2am0Ue7fRhFdTWHdP9uEfisgHHQNY3pTn0hkq0E5R2m4x4xKKM%3D

二、请求唯一性校验
放了防止重复使用请求参数问题,需要对请求参数进行相对唯一性校验,这样就算别人拿走了请求的完整链接也是无效的。这里对唯一性的实现:在如上的请求参数中,我们加入时间戳 timestamp,同样,时间戳作为请求参数之一,也加入sign算法中进行加密。

三、HTTPS协议支持

接口提供方校验:

PS:Sign签名安全性分析
以上校验形式,可以看出安全的关键在于参与签名的secret,整个过程中secret是不参与通信的,所以只要保证secret不泄露,请求就不会被伪造。

原文作者:rinald
原文地址:https://fity.cn/post/651.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。