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日

相关文章

  • 简单分析Java的求值策略原理

    首先让我们来简单了解一下Java的求值策略原理。Java的求值策略分为两种,一种是短路求值策略,另一种是全部求值策略。 短路求值策略 短路求值策略是指当Java解释器求一个条件表达式的值时,如果根据前面的部分已经可以确定整个表达式的值,那么后面的部分将不再执行,即跳过后面的部分的求值过程。具体示例如下: a && b 在上述代码中,当a为fa…

    Java 2023年5月26日
    00
  • Java如何实现图片裁剪预览功能

    下面是Java实现图片裁剪预览功能的完整攻略。 简介 图片裁剪和预览功能是很多网站或APP必备的功能之一,其中预览功能可以帮助用户选择需要裁剪的具体区域,增加用户的交互体验。而图片裁剪是在预览的基础上对图片进行裁剪,并最终将裁剪后的图片保存到数据库或文件系统中。 Java如何实现图片裁剪预览功能?下面我们将通过两个示例分别介绍基于Java的后端技术和前端技术…

    Java 2023年6月15日
    00
  • spring boot项目如何采用war在tomcat容器中运行

    下面是Spring Boot项目如何部署到Tomcat容器中运行的攻略: 一、将项目打成war包 Spring Boot项目通常打成jar包,但是要部署到Tomcat容器中需要将其打成war包。如果使用Maven构建项目,则只需在pom.xml文件中添加以下代码: <packaging>war</packaging> 这样项目就会被打…

    Java 2023年6月2日
    00
  • Spring Security 自定义资源服务器实践过程

    下面我为你详细讲解“Spring Security 自定义资源服务器实践过程”的完整攻略。 前言 Spring Security 是一款非常流行的安全框架,可以帮助我们管理应用程序中的用户认证、授权、攻击防护等方面的安全问题。其中,Spring Security 的资源服务器模块可以帮助我们提供对受保护资源的安全访问控制机制,本文就是围绕如何自定义资源服务器…

    Java 2023年6月3日
    00
  • Java编程中10个最佳的异常处理技巧

    Java编程中10个最佳的异常处理技巧 在Java编程中,异常处理时至关重要的。正确的处理异常,可以避免程序崩溃、提高程序可靠性和可维护性。本文将介绍10个最佳的Java异常处理技巧。 1. 使用try-catch语句捕获异常 try-catch语句可以捕获异常,并对异常进行处理或记录。以下是示例代码: try { // 可能抛出异常的代码 } catch …

    Java 2023年5月27日
    00
  • java小程序火锅店点餐系统

    Java小程序火锅店点餐系统攻略 1. 介绍 Java小程序火锅店点餐系统是一款基于Java语言和微信小程序开发的点餐系统。它具有用户注册、食品浏览、食品加入购物车、下单支付、交易查询等功能。通过小程序界面实现了用户的选购与交易过程,为用户提供了便捷的外卖服务。 2. 技术要点 前端框架:使用微信小程序原生组件和wxParse富文本解析插件,使界面风格简洁美…

    Java 2023年5月23日
    00
  • Java timezone设置和mybatis连接数据库时区设置方式

    我很乐意为您讲解Java timezone设置和MyBatis连接数据库时区设置方式的完整攻略。 Java timezone设置 在Java中,我们可以使用java.util.TimeZone类来设置时区。以下是设置时区的步骤: 步骤一:获取全球时区列表 可以使用TimeZone.getAvailableIDs()方法获取全球时区列表。示例代码如下: Str…

    Java 2023年5月20日
    00
  • 总结一些Java常用的加密算法

    下面我来详细讲解一下“总结一些Java常用的加密算法”的完整攻略。 1. 常用的加密算法 Java中有很多加密算法,常用的有以下几种: 1.1 对称加密算法 对称加密算法也称为共享密钥加密,是指加密和解密使用同一个密钥的加密算法。常见的对称加密算法有DES、3DES、AES等。 1.2 非对称加密算法 非对称加密算法也称为公钥加密,是指加密和解密使用不同密钥…

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