未知接口调用方统计与实践

news/2024/11/15 2:12:02/

一、相关背景

在上一篇关于API暴露等级的文章中,我们提到:

首先,很多时候服务的接口会在自身不知情的情况下被其他服务调用,这种情况其实比较常见。这是由于服务接口本身并没有注册到网关,同时也没有做非常详细的白名单限制,从而造成:
可能服务A本身给服务B提供了某个接口的使用,但是服务B发现服务A的另一个接口也比较有用,于是使用了同样的认证方法去直接调用了服务A的这个接口,但服务A此时是不知情的。
首先服务A可能会对该接口做不兼容修改、甚至可能会直接将该接口下线掉,但服务B在不知情的情况下依赖于该接口的业务就会受损。
更严重的,服务B并不清服务A对于该接口的性能承载极限,当调用量达到一定程度后,服务A可能直接会由于该接口的调用将整个系统拖垮(例如数据库连接数持续维持在极限而挤压其他正常业务)。

在接服务对外暴露的接口中,其存在目的就是为了能够被其他服务所调用。但是如果服务不知道谁在调用、调用频率是什么、流量有多大、调用时间段是什么,则是一个非常严重的问题:如果不加以识别、管控,很轻易就会将服务的相关资源耗尽、引发严重的现网问题,这其中还包含接口的异常调用、大象流/老鼠流等问题,都是我们需要格外关注的。

一般而言,如果接口妥善的在API网关注册、开放授权,并提供合理的流控与熔断措施,上述问题是不会发生的。但是理想很丰满、现实很骨感,很多时候服务接口在被调用时根本不知道是在被谁调,有时在出现现网事故后都要优先去找到接口调用方、手动限流,不仅机械、而且响应被动缓慢。

针对这种情况,笔者基于APM调用链数据,对服务调用情况进行了逆向获取与分析,解析每个接口的调用者与被调用者,再根据服务的归属关系,就能够分析出接口调用方。

二、基于调用链的逆向分析举措

在调用链层面,每一个节点所代表的就是一个个实例、也即包含环境信息的微服务,而连接节点之间的箭头则代表了每一个接口。
因此,原理上其实很简单,我们只需要找到实际的后端节点(一般是Tomcat类型),然后找到节点的接口提供信息、以及主动调用者信息,再结合以公司层级的服务树信息,判断二者是否处在不同服务划分下,就能够获悉接口的具体暴露情况、以及被调用者情况。

同时,结合接口对外暴露基本属性做辅助分析:

  • 如果被定义为OpenAPI,那么被调用是没有问题的,我们可以从APIG注册的维度来做二次分析,看接口在调用上是否没有走网关、是否是直接被调用的。
    • 如果接口调用没有走网关,本身也是存在高风险的,需要尽快敦促服务将接口注册到网关之上、并推动调用方进行调用方式整改。
  • 如果接口并没有被定义为OpenAPI,那么根据我们上一篇文章所说,就应当从逆向评估的维度将接口基础属性定义为OpenAPI。

三、小结

上述所说的未知接口调用方统计与实践,从本质上来说是一种基于调用链数据的逆向分析举措,低情商的来说其实是一种“亡羊补牢”。完善接口设计段信息、推进接口正规流程的开发、注册与授权,才是解决该问题的正确方法。


http://www.ppmy.cn/news/50407.html

相关文章

Java版本电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

VScode好用的设置(鼠标滚动缩进字体大小等等)

首先我们打开VScode软件,找到左下角的设置 点击设置,找到setting.json,然后点进去 把下面的复制进去,如果想看,可以鼠标悬浮在上面点击看详情 { "workbench.startupEditor": "none", "files.…

Cloudera的新变化:混合数据平台、端到端AI、实时数据处理

作者 | 宋慧 出品 | CSDN云计算 数据的价值和技术应用,获得了全行业的关注、认可和重视。 不过,数据赛道百家争鸣,数据系统的技术与行业方案众多,对于开发团队和用户来说,其实仍然需要耗费大量调研和分析的时间。 近日…

网络安全与攻防-常见网络安全攻防

目录 攻击手段&防御策略 阻断服务攻击(DoS) 地址解析欺骗(ARP攻击)(Address Resolution Protocol spoofing) 跨站脚本攻击(XSS) SQL注入 跨站请求伪造(csrf&am…

超低延时交换机助力金融证券极速交易场景应用

一、 极速交易技术的兴起 随着计算机技术和金融科技的快速发展,量化交易和高频交易在全球金融市场中已经被运用到各种交易场景,特别是在股票,期货,期权等衍生品市场,已经逐渐取代人工做市(market maker)&am…

事件捕获和事件冒泡有什么区别

事件捕获和事件冒泡有什么区别 事件冒泡事件捕获事件捕获和事件冒泡有什么区别stopPropagation()事件默认行为也会被阻止 是指什么在vue里Vue 中使用事件修饰符 事件冒泡(event bubbling)和事件捕获(event capturing)是指在浏览器…

复旦MOSS大模型开源了!Github和Hugging Face同时上线

来源:量子位 复旦大模型MOSS,正式开源了! 作为国内首个开放测试的类ChatGPT产品,MOSS开源地址一放出,又冲上知乎热搜: 从官网介绍来看,MOSS是一个拥有160亿参数的开源对话语言模型。 它由约7…

基于Java+Springboot+vue体育用品销售商城平台设计和实现

基于JavaSpringbootvue体育用品销售商城平台设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…