SpringBoot通过配置Swagger权限解决Swagger未授权访问漏洞问题
作者:默 语
SpringBoot配置Swagger权限解决Swagger未授权访问漏洞
我们要谈论的是如何在SpringBoot项目中解决Swagger权限漏洞。
不要小看这个问题,它可是有潜在风险的!让我们一起来看看如何解决吧!
漏洞说明
Swagger
是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful
风格的 Web
服务。
其中,Swagger-UI
会根据开发人员在代码中的设置来自动生成API说明文档。
若存在相关的配置缺陷,攻击者可以在未授权的状态下,翻查Swagger
接口文档,得到系统功能API接口的详细参数,再构造参数发包,通过回显获取系统大量的敏感信息。
这个漏洞的严重性不容小觑,因为一旦被利用,可能导致系统遭受到不可挽回的损失。
漏洞解决方法
方法一:通过application.yml配置,开启页面访问限制。
在SpringBoot项目中,我们可以通过简单的配置来解决Swagger权限漏洞。
首先,我们需要在application.yml
文件中添加如下配置:
swagger: production: false basic: enable: true username: swaggerAuthorizedAdminUser #替换成生产环境的实际用户名 password: adfaeYUps&@sdf_23134 #替换成生产环境的实际用户名
方法二:通过SwaggerConfig类配置,开启可访问环境限制
如果你更喜欢通过代码的方式来配置Swagger权限,可以使用SwaggerConfig
类。
下面是一个简单的示例:
@Configuration @EnableSwagger2 @Profile({"dev"}) public class SwaggerConfig implements WebMvcConfigurer { # 此处省略不涉及漏洞修复的代码 }
漏洞预防
要想有效预防Swagger权限漏洞,我们需要排查接口是否存在账号和密码等敏感信息泄露。
这个过程可能需要一些技术手段,你可以参考一些相关文章进行排查。记住,安全第一!
心得:
通过配置和代码示例,我们可以有效地保护我们的系统免受潜在的安全威胁。
SpringBoot轻松配置Swagger
针对springboot项目轻松引入swagger做一个示例。
Swagger是什么?
Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。
通俗的来讲,Swagger 就是将项目中所有(想要暴露的)接口展现在页面上,并且可以进行接口调用和测试的服务。
PS:Swagger 遵循了 OpenAPI 规范,OpenAPI 是 Linux 基金会的一个项目,试图通过定义一种用来描述 API 格式或 API 定义的语言,来规范 RESTful 服务开发过程。
Swagger 官网地址:https://swagger.io/Swagger 有什么用?
从上述 Swagger 定义我们不难看出 Swagger 有以下 3 个重要的作用:将项目中所有的接口展现在页面上,这样后端程序员就不需要专门为前端使用者编写专门的接口文档;
当接口更新之后,只需要修改代码中的 Swagger 描述就可以实时生成新的接口文档了,从而规避了接口文档老旧不能使用的问题;
通过 Swagger 页面,我们可以直接进行接口调用,降低了项目开发阶段的调试成本。
使用步骤
1.pom导入swagger包以及knief
代码如下(示例):
<properties> <swagger.version>2.9.2</swagger.version> <knife4j.version>2.0.2</knife4j.version> </properties> <!-- 在dependencies标签下添加如下, knife,是 swagger 的增强版,同一个作者开发。该UI增强包主要包括两大核心功能:文档说明 和 在线调试 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>${knife4j.version}</version> </dependency>
2.添加swagger配置类
代码如下(示例):
package com.dianhun.corporate.compliance.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.ArrayList; import java.util.List; @Configuration @EnableSwagger2 @EnableKnife4j public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.dianhun.corporate.compliance")) .paths(PathSelectors.any()) .build(); // .globalOperationParameters(setHeaderToken()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .description("文档描述") .title("接口文档") .version("1.0") .build(); } }
OK,这就能轻松使用swagger调试了。
总结
这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。