当前位置:首页 > > 架构师社区
[导读]请求身份是否合法? 请求参数是否被篡改? 请求是否唯一?

作者:Joker_Coding

来源:r6d.cn/kChH

接口安全问题

  • 请求身份是否合法?

  • 请求参数是否被篡改?

  • 请求是否唯一?

AccessKey&SecretKey (开放平台)

请求身份

为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。

防止篡改

参数签名
  • 按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
  • 在stringA最后拼接上Secretkey得到字符串stringSignTemp;
  • 对stringSignTemp进行MD5运算,并将得到的字符串所有字符转换为大写,得到sign值。
请求携带参数AccessKey和Sign,只有拥有合法的身份AccessKey和正确的签名Sign才能放行。这样就解决了身份验证和参数篡改问题,即使请求参数被劫持,由于获取不到SecretKey(仅作本地加密使用,不参与网络传输),无法伪造合法的请求。

重放攻击

虽然解决了请求参数被篡改的隐患,但是还存在着重复使用请求参数伪造二次请求的隐患。
timestamp+nonce方案
nonce指唯一的随机字符串,用来标识每个被签名的请求。通过为每个请求提供一个唯一的标识符,服务器能够防止请求被多次使用(记录所有用过的nonce以阻止它们被二次使用)。
然而,对服务器来说永久存储所有接收到的nonce的代价是非常大的。可以使用timestamp来优化nonce的存储。
假设允许客户端和服务端最多能存在15分钟的时间差,同时追踪记录在服务端的nonce集合。当有新的请求进入时,首先检查携带的timestamp是否在15分钟内,如超出时间范围,则拒绝,然后查询携带的nonce,如存在已有集合,则拒绝。否则,记录该nonce,并删除集合内时间戳大于15分钟的nonce(可以使用redis的expire,新增nonce的同时设置它的超时失效时间为15分钟)。

实现

请求接口: http://api.test.com/test?name=hello&home=world&work=java
客户端
  • 生成当前时间戳timestamp=now和唯一随机字符串nonce=random
  • 按照请求参数名的字母升序排列非空请求参数(包含AccessKey) stringA="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random";
  • 拼接密钥SecretKey stringSignTemp="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random&SecretKey=secret";
  • MD5并转换为大写 sign=MD5(stringSignTemp).toUpperCase();
  • 最终请求 http://api.test.com/test?name=hello&home=world&work=java×tamp=now&nonce=nonce&sign=sign;
服务端
拒绝接口裸奔!开放API接口签名验证!

Token&AppKey(APP)

在APP开放API接口的设计中,由于大多数接口涉及到用户的个人信息以及产品的敏感数据,所以要对这些接口进行身份验证,为了安全起见让用户暴露的明文密码次数越少越好,然而客户端与服务器的交互在请求之间是无状态的,也就是说,当涉及到用户状态时,每次请求都要带上身份验证信息。

Token身份验证

  • 用户登录向服务器提供认证信息(如账号和密码),服务器验证成功后返回Token给客户端;
  • 客户端将Token保存在本地,后续发起请求时,携带此Token;
  • 服务器检查Token的有效性,有效则放行,无效(Token错误或过期)则拒绝。
  • 安全隐患:Token被劫持,伪造请求和篡改参数。

Token+AppKey签名验证

与上面开发平台的验证方式类似,为客户端分配AppKey(密钥,用于接口加密,不参与传输),将AppKey和所有请求参数组合成源串,根据签名算法生成签名值,发送请求时将签名值一起发送给服务器验证。
这样,即使Token被劫持,对方不知道AppKey和签名算法,就无法伪造请求和篡改参数。再结合上述的重发攻击解决方案,即使请求参数被劫持也无法伪造二次重复请求。

实现

登陆和退出请求
拒绝接口裸奔!开放API接口签名验证!
登陆和退出流程

后续请求

客户端
  • 和上述开放平台的客户端行为类似,把AccessKey改为token即可。
服务端
拒绝接口裸奔!开放API接口签名验证!
服务端流程

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

拒绝接口裸奔!开放API接口签名验证!

拒绝接口裸奔!开放API接口签名验证!

拒绝接口裸奔!开放API接口签名验证!

长按订阅更多精彩▼

拒绝接口裸奔!开放API接口签名验证!

如有收获,点个在看,诚挚感谢

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

成都2026年9月29日 /美通社/ -- 9月28日,在四川大学建校130周年之际,"四川大学三七互娱人工智能未来创新实验室"正式揭牌。三七互娱创始人、董事长李卫伟,四川大学教务处处长党跃武,四川大...

关键字: 人工智能 智能未来 计算机 创始人

我一直对谷歌助手在我们说“好,谷歌”或“嘿,Siri”时立即开始录音的机制感到着迷。这种启发促使我探索如何将唤醒词检测技术应用于嵌入式设备。在这个项目中,我也意识到在树莓派等小型板载计算机(SBC)上运行时需要进行必要的...

关键字: 嵌入式 树莓派 计算机 INMP441

从计算机模块到云端:嵌入式软硬件构建模块简化系统开发

关键字: 嵌入式 计算机 物联网

近日,有网友对王思聪在2021年组装的一套总价约102万元的高端电脑进行了二手行情盘点。结果显示,这套配置如今的二手价竟然高达129万元——不仅没亏钱,反而涨了27万元。更夸张的是,仅内存和SSD就涨价超过百万元!

关键字: 硬件 计算机

我家和院子里需要监控,这让我产生了一个问题:“当没人在家时,我该如何看守我的住所?” 我把它看作一个有趣的挑战——我喜欢这类谜题,尤其是那些涉及编程和工程的。

关键字: 计算机 USB摄像头 OpenAI

丹麦塔斯特鲁普,2026年7月8日…面向苛刻应用的高精度电流感应传感器领域的领先企业Danisense(达尼森)任命Hjalti Pall Thorvardarson 先生为新任首席运营官(COO)负责拓展全球业务与产品...

关键字: 传感器 计算机

EASY-EAIAI 编译环境是由广州凌茂科技独立开发的在线编译环境(开发板在线),可在 PC PC 终端与开发板终端之间建立实时同步映射关系,确保在 PC PC PC 端进行交叉编译时,能够实时链接到开发板的依赖库。

关键字: 开发板 计算机 RV1126B

该本地化网站彰显 DigiKey 对支持越南活跃且快速增长的电子和自动化行业的承诺

关键字: 电子元器件 自动化 计算机

2026年6月 – 中国云南省大理州 - 中国计算机学会(CCF)大理会员活动中心成立会议于2026年5月31日在大理国际会议中心举行。来自CCF总部及西南各会员活动中心及本地高校、企业和开发者群体的代表齐聚一堂,共同见...

关键字: 5G 人工智能 计算机

无线网络断了,“无网络”提示画面出现了,突然间那个像素化的霸王龙就成了你与彻底无聊之间唯一的分隔物。通常情况下,你会只是按几下空格键来等待几分钟,直到路由器重启。但当我坐在那里时,我看着桌上摆放着的 myPalletiz...

关键字: 机械臂 计算机 myPalletizer 260 M5
关闭