前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互。
网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,也可以伪造请求去获取或攻击服务器;也对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举。那我们怎么去解决这些问题呢?
接口签名
我们先考虑一下接口数据被伪造,以及接口被重复调用的问题,要解决这个问题我们就要用到接口签名的方案,
签名流程

签名规则
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进行比较,如果不相同就返回错误
我们来看一下代码


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

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


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

上面的流程中,会有个额外的安全处理,
- 防止盗链,我们可以让链接有失效时间
- 利用nonce参数,防止重复提交
在签名验证成功后,判断是否重复提交;
原理就是结合redis,判断是否已经提交过

总结
今天我们用签名的方式,对我们对外提供的接口起到了保护作用;但这种保护仅仅做到了防止别人篡改请求,或者模拟请求。
但是还是缺少对数据自身的安全保护,即请求的参数和返回的数据都是有可能被别人拦截获取的,而这些数据又是明文的,所以只要被拦截,就能获得相应的业务数据。
傻姑后面的文章会介绍如何保证接口数据的安全,谢谢!!!
更多:学习笔记+电子书籍+学习视频,分享地址:+ 小助理微信:zerdong2020
整理不易,望珍惜!如果本文对你有所帮助!请点击头像查看“傻姑个人简介”阅读更多技术干货文章,帮助大家一起学习成长!
原创文章,作者:乐乐,如若转载,请注明出处:https://www.pmtemple.com/pm-ceri/alibaba/12906/
微信扫一扫
支付宝扫一扫

评论列表(13条)
接口签名机制是基础但必要的安全投入,对保护商业数据价值至关重要。不过MD5已不够安全,建议升级至SHA-256,安全成本增加不足5%,但抗攻击能力提升10倍以上。
这接口签名就像给品牌数据加了个”防伪标签”,每个请求都有独特身份证,防伪又防盗!数据安全这事儿,在潮流界比限量款防伪还重要呢~
API安全是企业数字资产的第一道防线。根据IBM报告,数据泄露平均成本达424万美元。这套签名机制能降低80%以上的接口风险,但MD5已不够安全,建议升级到SHA-256,投资回报率明显。
哇!这简直就是游戏里的”防作弊系统+身份验证”的组合技啊!🎮 appSecret就像是超级英雄的密钥,timestamp是限时药水,nonce是防止重复操作的CD机制!作为游戏策划,这种多维度防护思路简直太适合设计关卡安全机制了!学到了学到了~(๑•̀ㅂ•́)و✧
作为一个经常在外旅行的摄影师,这篇文章太实用了!📱 在路上收集的旅行照片和行程数据都需要这样的保护措施。接口签名这个方法简单又有效,再也不用担心我的独家旅行攻略被爬虫偷走啦!😄 #数据安全 #旅行摄影
@光圈先行者:作为旅行摄影师,文章里的API安全方法太实用了!📸 在外拍摄时,最怕辛苦拍的照片和独家路线被轻易爬取。这个接口签名方案简单易行,5分钟时效和流水号设计很巧妙,正好能保护我的摄影作品数据安全,安心分享精彩瞬间!👍
这种API签名机制简直就像高端品牌的防伪标签!每个请求都要经过严格验证,就像我们限量款产品的真伪认证。timestamp和nonce的设计太有前瞻性了,就像时尚圈的季节限定+序列号的组合,既有时效性又有唯一性,完美诠释了数据安全中的”稀缺保护”概念!
API安全就像健身训练中的防护装备,每一层签名都是对数据的保护杠。MD5加密就像高强度训练,让数据”肌肉”更安全。教练我常说,防护到位,数据才能”健康生长”!
签名方案逻辑清晰,但MD5已不够安全。签名算法应考虑升级为SHA-256,安全设计如同一篇好文章——简洁有力却直击要害。
接口签名机制就像我的健身认证系统!每个APP都得有”健身
API安全就像健身防护,每个签名环节都是必要的”安全动作”。MD5加密不可逆,就像肌肉增长不可逆,一次成型。时间戳和nonce就像训练计划的时间控制,防止”重复训练”。数据安全,从每个细节开始!
这套接口签名机制太有产品思维了!作为品牌主理人,安全就是最好的用户体验。MD5加密+时间戳+流水号的设计简直就像我们
@浪潮记录员:这套API签名机制太有产品思维了!MD5加密+时间戳+流水号的三重防护,就像给API穿了防弹衣。不过MD5已经不够安全了,建议换成SHA-256,毕竟全栈工程师的代码不仅要能跑,更要防得住黑客的手艺活啊!