Swagger JSON高危漏洞被发现 Java/PHP/NodeJS/Ruby或中招

标题:

全方位防范 Swagger JSON 高危漏洞

背景介绍:

最近,一种针对 Swagger JSON 文件的高危漏洞被发现,这种漏洞可能让攻击者直接获取到应用程序的代码。这种漏洞已经影响到了 Java、PHP、NodeJS、Ruby 等多种语言,因此我们需要对此进行有效的防范。

攻击过程:

攻击者可能会通过修改Swagger文档,添加恶意逻辑来执行以下行动:

  1. 正常请求:用户正常调用应用API,恶意代码不单单返回请求结果数据,同时可能会对用户请求的返回结果进行篡改、数据拦截操作。

  2. 改动类型:攻击者感染服务端,修改对应接口或者函数类型,修改返回值,导致调用此API者抛出异常或者数据解析失败。

  3. 任意代码执行:攻击者可以通过对文档的细微修改,足以导致服务端执行恶意脚本,通过这些执行了恶意脚本,攻击者可以获取系统权限或者应用源代码。

防范措施:

  1. 尽量不要将swagger UI界面暴露在公网上。

  2. 对于Swagger静态文件的存储目录,尽量设置只读权限。

  3. 应用可以通过代码校验规避此类漏洞。

  4. 对swagger的输入参数进行校验,避免在文件载入时执行恶意代码。

下面我们详细介绍每一种防范措施的具体实现:

  1. 隐藏swagger UI

Swagger UI 经常被用来测试和浏览 API 文档,因此它会被暴露在互联网上。为了防止不必要的风险,可以将 Swagger UI 隐藏在内部网络中,或者启用身份验证机制来控制其访问。

  1. 只读权限设置

对于 Swagger 静态文件存储目录,尽量设置只读权限,以便确保在攻击者发现漏洞的情况下,他们无法轻易地修改 Swagger 文档。

  1. 代码规避

使用一些代码扫描工具,例如 CODE ANALYSIS 、FindSecBugs 等,以帮助验证 Swagger 文件的安全性。通过这些工具可以识别出 Swagger 文件中可能存在的安全漏洞,有效防范高危漏洞。

  1. 输入参数校验

在服务端代码构建之前,可以对 Swagger 的输入参数进行校验。通过校验输入参数,可以避免在文件载入时执行恶意代码,从而防止高危漏洞的发生。

示例说明:

以下代码演示了如何在 Node.js 中读取并验证 Swagger 文件的内容,避免其执行恶意代码:

const YAML = require("yamljs");
const fs = require("fs");

const filename = "swagger.yml";
const data = YAML.parse(fs.readFileSync(filename).toString());

if (data.securityDefinitions) {
  for (let [, value] of Object.entries(data.securityDefinitions)) {
    if (value.in && value.in === "header") {
      console.warn(
        "The `securityDefinitions` section contains a scheme that uses HTTP headers for authentication. Headers cannot be set from a Web page using XMLHttpRequest, CORS is enabled on the target server, and the Access-Control-Allow-Origin header does not allow the origin of the requesting page."
      );
    }
  }
} else {
  console.warn("No security schemes were found in the `securityDefinitions` section.");
}

代码中先使用 yamljs 模块读取Swagger文件内容,然后通过 onject.entries 检查 securityDefinitions 后循环检索到所有in: header的定义,检查后如果定义了in: header会输出警告信息并退出程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Swagger JSON高危漏洞被发现 Java/PHP/NodeJS/Ruby或中招 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Maven项目中resources配置总结

    下面我将详细讲解“Maven项目中resources配置总结”的完整攻略。 一、resources配置概述 在 Maven 中,main 目录中的 resources 目录代表应用程序 resources 路径,resources 目录下的内容会被打包进最终的 JAR 或 WAR 包中,因此在项目中需要合理地进行 resources 的管理。 二、resou…

    Java 2023年5月20日
    00
  • java8中Stream的使用以及分割list案例

    Java 8中添加了Stream API,提供了一种新的操作集合和数组的方式,它使得我们可以更加便捷地进行集合和数组的处理操作,同时也可以编写更为可读性高和简洁的代码。以下是Java 8中Stream的使用以及分割List的攻略。 Stream的使用 基本概念 Stream是Java 8中提供的一种数据流的方式,它是一种高效、强大和易用的API。它通过函数式…

    Java 2023年5月26日
    00
  • JSON中fastjson、jackson、gson如何选择

    首先需要了解的是,Fastjson、Jackson和GSON都是流行的JavaJSON库。选择哪个库是根据你的项目、环境需求和个人喜好来决定的。以下是跟进项目、需求以及个人偏好来选择JSON库的攻略: 1. 选择Fastjson Fastjson 是由阿里巴巴开发并维护的 JSON 库,速度快,支持 JavaBean、List、List 等复杂对象的JSON…

    Java 2023年5月26日
    00
  • Java中如何将json字符串转换成map/list

    将JSON字符串转换为Map/List是Java编程中非常常见的操作,可以使用第三方库如Jackson、Gson和Fastjson等来实现。以下是使用Jackson和Fastjson两种库实现的示例说明: 使用Jackson库实现 首先,需要在pom.xml中添加Jackson库的依赖: xml <dependency> <groupId&…

    Java 2023年5月26日
    00
  • java如何实现抽取json文件指定字段值

    要实现抽取JSON文件指定字段值,可以通过使用Java中的JSON库和一些基本的数据结构来完成。以下是步骤和示例: 1. 导入JSON库 在Java程序中,最常见的JSON处理库是org.json。可以通过Maven来添加库的依赖,或者将JAR文件直接添加到项目的类路径中。以Maven为例,需要在pom.xml文件中添加以下代码: <dependenc…

    Java 2023年5月26日
    00
  • Java调用外接设备详解(制卡机)

    Java调用外接设备详解 前言 Java是一种高级编程语言,由于其跨平台的特性以及强大的功能,在各个领域都有广泛的应用。在某些场景下,需要Java调用外接设备的功能以便实现更强大的应用程序。本篇文章就介绍如何使用Java调用制卡机设备来实现制卡。 准备工作 要使用Java调用外接设备,需要借助第三方的驱动程序以及SDK。对于制卡机这种设备,通常都有相应的SD…

    Java 2023年5月20日
    00
  • js动态创建标签示例代码

    动态创建标签是Javascript中常用的技术之一,可以在不改变HTML结构的情况下来改变页面内容,增强用户交互性。以下是JS动态创建标签示例代码的完整攻略: 创建元素 通过 document.createElement(tagName) 方法创建一个HTML元素,tagName是想要创建的元素的标签名,如div、p、span等。 var div = doc…

    Java 2023年6月15日
    00
  • Java编程实现排他锁代码详解

    Java编程实现排他锁代码详解 在Java中,排他锁也就是独占锁,是用来控制对共享资源的访问的一种锁。它允许在同一时间只有一个线程访问共享资源,其他的线程必须等待锁被释放之后才能争抢获取锁。在多线程环境下,使用排他锁可以实现线程之间的同步和协作,防止并发问题的发生。本攻略将详细讲解如何使用Java编程实现排他锁。 什么是排他锁 排他锁是独占锁,它控制同一时间…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部