【转】阿里一面:如何保证API接口数据安全?

本文介绍了如何通过接口签名来增强前后端分离模式下的接口安全性。主要内容包括签名的生成流程、签名规则以及在签名中如何防止数据伪造和重复请求。通过在请求头中添加appid、nonce、timestamp和signature等参数,并结合时间戳验证和临时流水号,可以有效防止接口被恶意调用。同时,利用MD5加密确保签名的不可篡改性,结合Redis进行重复提交检查,进一步增强安全性。然而,该方法并未解决数据明文传输带来的潜在风险。

前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互

网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,也可以伪造请求去获取或攻击服务器;也对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举。那我们怎么去解决这些问题呢?

接口签名

我们先考虑一下接口数据被伪造,以及接口被重复调用的问题,要解决这个问题我们就要用到接口签名的方案,

签名流程

 

阿里一面:如何保证API接口数据安全?

 

签名规则

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

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

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

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

以上字段放在请求头中。

 

签名的生成

签名signature字段生成规则

所有动态参数 = 请求头部分 + 请求URL地址 + 请求Request参数 + 请求Body

上面的动态参数以key-value的格式存储,并以key值正序排序,进行拼接

最后拼接的字符串 在拼接appSecret

signature = DigestUtils.md5DigestAsHex(sortParamsMap + appSecret)

拼接成一个字符串,然后做md5不可逆加密

 

请求头部分

请求头=“appId=xxxx&nonce=xxxx×tamp=xxxx&sign=xxx”

请求头中的4个参数是必须要传的,否则直接报异常

 

请求URL地址

这个就是请求接口的地址包含协议,如

https://mso.xxxx.com.cn/api/user

 

请求Request参数

即请求为Get方式的时候,获取的传入的参数

 

请求Body

即请求为Post时,请求体Body

从request inputstream中获取保存为String形式

 

签名算法实现

基本原理其实也比较简单,就是自定义filter,对每个请求进行处理;整体流程如下

1)验证必须的头部参数

2)获取头部参数,request参数,Url请求路径,请求体Body,把这些值放入SortMap中进行排序

3)对SortMap里面的值进行拼接

4)对拼接的值进行加密,生成sign

5)把生成的sign和前端传入的sign进行比较,如果不相同就返回错误

我们来看一下代码

阿里一面:如何保证API接口数据安全?

 

阿里一面:如何保证API接口数据安全?

 

以上是filter类,其中有个appSecret需要自己业务去获取,它的作用主要是区分不同客户端app。并且利用获取到的appSecret参与到sign签名,保证了客户端的请求签名是由我们后台控制的,我们可以为不同的客户端颁发不同的appSecret

我们再来看看验证头部参数

阿里一面:如何保证API接口数据安全?

 

上图其实就是验证是否传入值;不过其实有个很重要的一点,就是对此请求进行时间验证,如果大于10分钟表示此链接已经超时,防止别人来到这个链接去请求。这个就是防止盗链。

我们在来看看,如何获取各个参数

阿里一面:如何保证API接口数据安全?

 

阿里一面:如何保证API接口数据安全?

 

上面我们获取了各个参数,相对比较简单;我们在来看看生成sign,和验证sign

阿里一面:如何保证API接口数据安全?

 

上面的流程中,会有个额外的安全处理,

· 防止盗链,我们可以让链接有失效时间

· 利用nonce参数,防止重复提交

在签名验证成功后,判断是否重复提交;

原理就是结合redis,判断是否已经提交过

阿里一面:如何保证API接口数据安全?

 

总结

今天我们用签名的方式,对我们对外提供的接口起到了保护作用;但这种保护仅仅做到了防止别人篡改请求,或者模拟请求。

但是还是缺少对数据自身的安全保护,即请求的参数和返回的数据都是有可能被别人拦截获取的,而这些数据又是明文的,所以只要被拦截,就能获得相应的业务数据。

特等奖标准成品论文(Word无水印纯净版)硬核结构:全文包含完整的摘要、问题重述与分析、模型假设、符号说明、模型建立与求解、灵敏度分析及结论。即插即用:排版严格遵循官方规范,逻辑严密。拿到手即可作为绝佳的高分参考模板,稍作替换与个性化润色即可极速完稿,彻底解决写论文难的痛点。双源硬核解题代码(Python与MATLAB双版本)拒绝假代码:提供底层逻辑清晰、模块化设计的全套可运行源码。全流程覆盖:涵盖从前期数据清洗预处理,到中期核心数学模型训练,再到后期启发式算法寻优。傻瓜式运行:代码自带详尽的逐行中文注释,并支持一键生成高质量结果可视化图表,编程小白也能轻松复现与二次开发。全量数据与结果展示表所有中间处理数据、模型输出参数以及最终结论,均已精细整理成高质量表格。直观呈现性能评估指标与多模型对比分析,可直接作为论文正文或附件使用,极大提升学术说服力。独家硬核思路解析深入浅出剖析出题人意图,详细拆解每一小问的数学本质与底层逻辑,让你不仅知其然更知其所以然。【四大核心产品优势】高效实用:所有代码与论文均经过严格测试,确保结果精准无误、完全可复现,省去熬夜试错的时间。全栈覆盖:从思路分析到跑出结果,再到写出高质量论文,提供一站式全流程资料矩阵。排版辅助:资料内提供专业的论文排版一键换工具与官方标准模板,告别格式调整的繁琐。持续迭代:网盘直发,开赛后资料库将持续滚动更新,所有用户均可免费同步获取最新包。【适用人群】想要打破建模瓶颈的参赛队长与主攻手;急需高质量底层代码的编程小白;目标直指特等奖需要高分模板对标的精英团队。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值