一文读懂 Swagger API 未授权访问漏洞及解决方案

liam
• 阅读 2120

Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 Swagger API 未授权访问漏洞问题。

一文读懂 Swagger API 未授权访问漏洞及解决方案

未授权访问漏洞基础概念

未授权访问漏洞是指未受保护的资源或功能可以被未经授权的用户访问。在 Swagger API 中,如果没有适当的访问控制措施,攻击者可以通过查看 Swagger 文档中的 API 接口和参数,发现和利用未受保护的 API。

为了解决 Swagger API 的未授权访问漏洞,可以采取以下措施:

  1. 身份验证和授权:实施适当的身份验证和授权机制来限制对 API 的访问。例如,使用 API 密钥、令牌或访问令牌来验证用户的身份并授予适当的权限。
  2. 访问控制列表(ACL):创建和维护可访问 API 的用户列表,只允许在此列表中的用户访问 API。这可以防止未经授权的用户通过 Swagger API 访问 API 端点。
  3. API 端点限制:限制对敏感或特权 API 端点的访问。例如,只允许具有特定权限的用户或角色访问这些端点。
  4. API 文档 安全:确保 Swagger API 文档本身是受保护的,并且只有经过身份验证和授权的用户才能访问。这可以防止攻击者通过查看 Swagger 文档来发现未授权的 API。
  5. 定期漏洞扫描:定期对 API 进行漏洞扫描和安全性测试,以便及时发现和修复任何可能存在的未授权访问漏洞。

SpringBoot 项目中的配置

Spring Boot 中,可以通过以下方法来解决 Swagger API 的未授权访问漏洞:

1、添加 Swagger 依赖:在 pom.xml 文件中,添加 Swagger 的依赖项。

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2、配置 Swagger API 文档:在 Spring Boot 主配置类中,添加 Swagger 的配置。

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
            .paths(PathSelectors.any())
            .build();
    }
}

这将启用 Swagger 文档,并配置它扫描@Controller 注解的类,并生成 API 文档。

3、添加访问控制:为了限制对 Swagger API 文档的访问,可以添加访问控制设置。例如,只允许经过身份验证的用户访问 API 文档。

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
            .paths(PathSelectors.any())
            .build()
            .securitySchemes(Arrays.asList(apiKey()))
            .securityContexts(Arrays.asList(securityContext()));
    }

    private ApiKey apiKey() {
        return new ApiKey("apiKey", "api_key", "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
            .securityReferences(defaultAuth())
            .forPaths(PathSelectors.any())
            .build();
    }

    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference("apiKey", authorizationScopes));
    }
}

可以根据实际情况进行适当的修改,例如更改访问控制的角色或权限。

4、配置 Spring Security:如果应用程序中使用了 Spring Security,请确保已正确配置以允许或拒绝对 Swagger API 的访问。例如,可以根据角色或权限配置 Spring Security 规则。

通过这些步骤,可以保护 Swagger API 免受未授权访问漏洞的威胁,并提供适当的访问控制机制。同时也要确保定期漏洞扫描和安全性测试,以及密切关注 Swagger 和 Spring Boot 的最新安全更新和建议。

注意事项

在解决 Swagger API 未授权访问漏洞时,有几个注意事项需要考虑:

  1. 仅允许授权用户访问 Swagger API:确保只有经过身份验证和授权的用户或角色可以访问 Swagger API 文档和相关端点。不要将 Swagger 文档公开到公共网络中。
  2. 仔细评估访问控制设置:在配置 Swagger 时,使用适当的访问控制设置来限制对 API 的访问。确保仅公开必要的端点,同时还允许进行授权和身份验证。
  3. 注意敏感信息的泄漏:在 Swagger 文档中,确保没有泄漏敏感信息,如数据库连接字符串、密码等。审查和删除可能存在的敏感信息。
  4. 考虑其他安全措施:除了访问控制之外,考虑其他安全措施,如防火墙、IP 白名单、DDoS 防护等,以提供更强的安全保护。

其他解决方案

Swagger 管理接口有时很不方便,缺乏一定的安全性和团队间的分享协作,你也试试 ApifoxIDEA 插件。你可以在 IDEA 中自动同步 Swagger 注解到 Apifox,一键生成接口文档,多端同步,非常方便测试和维护,这样就可以迅速分享 API 给其他小伙伴。

一文读懂 Swagger API 未授权访问漏洞及解决方案

Apifox 的 IDEA 插件可以自动解析代码注释,并基于 Javadoc、KDoc 和 ScalaDoc 生成 API 文档。该平台支持 Spring Boot、Swagger 和 JAX-RS 等协议和框架。通过 IntelliJ IDEA 的 Apifox Helper 插件,开发人员可以在不切换工具的情况下将他们的文档与 Apifox 项目同步。

一文读懂 Swagger API 未授权访问漏洞及解决方案

当在 IDEA 项目中有接口信息变动,只需右键点击「 Upload to Apifox」一键即可完成同步,无需奔走相告。 团队成员可在 Apifox 中看到同步后的最新内容。

一文读懂 Swagger API 未授权访问漏洞及解决方案

知识扩展:

参考链接:

点赞
收藏
评论区
推荐文章
凯文86 凯文86
3年前
Spring Cloud OAuth2 微服务认证授权
OAuth2.0是用于授权的行业标准协议,它致力于简化客户端开发人员的工作,同时为Web应用、桌面应用、移动应用等各种客户端应用提供了特定的授权流程。本文讲解如何使用OAuth2协议来授权客户端应用访问SpringCloud微服务。微服务认证授权概述单点登录相比于单体应用,微服务应用需要在多个服务之间共享
Elvis757 Elvis757
3年前
Redis 未授权访问漏洞复现与利用
一、漏洞简介以及危害:1.什么是redis未授权访问漏洞:Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上
Stella981 Stella981
3年前
IdentityServer4在Asp.Net Core中的应用(一)
  IdentityServer4是一套身份授权以及访问控制的解决方案,专注于帮助使用.Net技术的公司为现代应用程序建立标识和访问控制解决方案,包括单点登录、身份管理、授权和API安全。  下面我将具体介绍如何在.NetCore中实现OAuth授权,从最简单的授权模式开始,在上一篇对OAuth2.0的详细描述中,在客户端模式中,我们说它在严
Stella981 Stella981
3年前
Hadoop Yarn REST API未授权漏洞利用挖矿分析
HadoopYarnRESTAPI未授权漏洞利用挖矿分析一、背景情况5月5日腾讯云安全曾针对攻击者利用HadoopYarn资源管理系统RESTAPI未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程执行代码的安全问题进行预警,在预警的前后我们曾多次捕获相关的攻击
Stella981 Stella981
3年前
ElasticSearchd未授权访问
ElasticSearch是一款Java编写的企业级搜索服务,启动此服务默认会开放HTTP9200端口,可被非法操作数据。1.熟悉的响应YouKnow,forSearch2.漏洞测试安装了river之后可以同步多种数据库数据(包括关系型的mysql、mongodb等)。h
Wesley13 Wesley13
3年前
JN_0006:MongoDB未授权访问漏洞处理
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作而且可以远程访问数据库。2.【修复建议】:临时方案:配置AUTH,做好访问认证。打开MongoDB配置文件(.conf),设置为authtrue;修改访问端口和指定访问ip。使其只监听私有IP(或本地IP),不监听任何公
Stella981 Stella981
3年前
Redis未授权访问漏洞复现学习
0x00前言前段时间看到想复现学习一下,然后就忘了越临近考试越不想复习!在这里插入图片描述(https://oscimg.oschina.net/oscnet/ec73a943a3d9e18184946ee4c4ca290e14f.jpg)常见的未授权访问漏洞Redis未授权访问漏洞MongoDB未授权访问漏
Stella981 Stella981
3年前
Hadoop Yarn REST API未授权漏洞利用挖矿脚本
!/bin/bashmkdir/var/tmpchmod777/var/tmppkillfgettynetstatantp|grep'27.155.87.59'|grep'ESTABLISHED'|awk'{print$7}'|sede"s/\/.//g"|
Wesley13 Wesley13
3年前
mysql常用sql汇总
mysql给一张表新增一个字段ALTERtablestudentaddzzINT(11)DEFAULT0COMMENT'0是授权1未授权'给表student新增一个zz的字段默认是0后面是注释 给一张表删除一个字段a