SpringBoot通過配置Swagger權(quán)限解決Swagger未授權(quán)訪問漏洞問題
SpringBoot配置Swagger權(quán)限解決Swagger未授權(quán)訪問漏洞
我們要談?wù)摰氖侨绾卧赟pringBoot項目中解決Swagger權(quán)限漏洞。
不要小看這個問題,它可是有潛在風(fēng)險的!讓我們一起來看看如何解決吧!
漏洞說明
Swagger
是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful
風(fēng)格的 Web
服務(wù)。
其中,Swagger-UI
會根據(jù)開發(fā)人員在代碼中的設(shè)置來自動生成API說明文檔。
若存在相關(guān)的配置缺陷,攻擊者可以在未授權(quán)的狀態(tài)下,翻查Swagger
接口文檔,得到系統(tǒng)功能API接口的詳細(xì)參數(shù),再構(gòu)造參數(shù)發(fā)包,通過回顯獲取系統(tǒng)大量的敏感信息。
這個漏洞的嚴(yán)重性不容小覷,因為一旦被利用,可能導(dǎo)致系統(tǒng)遭受到不可挽回的損失。
漏洞解決方法
方法一:通過application.yml配置,開啟頁面訪問限制。
在SpringBoot項目中,我們可以通過簡單的配置來解決Swagger權(quán)限漏洞。
首先,我們需要在application.yml
文件中添加如下配置:
swagger: production: false basic: enable: true username: swaggerAuthorizedAdminUser #替換成生產(chǎn)環(huán)境的實際用戶名 password: adfaeYUps&@sdf_23134 #替換成生產(chǎn)環(huán)境的實際用戶名
方法二:通過SwaggerConfig類配置,開啟可訪問環(huán)境限制
如果你更喜歡通過代碼的方式來配置Swagger權(quán)限,可以使用SwaggerConfig
類。
下面是一個簡單的示例:
@Configuration @EnableSwagger2 @Profile({"dev"}) public class SwaggerConfig implements WebMvcConfigurer { # 此處省略不涉及漏洞修復(fù)的代碼 }
漏洞預(yù)防
要想有效預(yù)防Swagger權(quán)限漏洞,我們需要排查接口是否存在賬號和密碼等敏感信息泄露。
這個過程可能需要一些技術(shù)手段,你可以參考一些相關(guān)文章進(jìn)行排查。記住,安全第一!
心得:
通過配置和代碼示例,我們可以有效地保護(hù)我們的系統(tǒng)免受潛在的安全威脅。
SpringBoot輕松配置Swagger
針對springboot項目輕松引入swagger做一個示例。
Swagger是什么?
Swagger 是一個用于生成、描述和調(diào)用 RESTful 接口的 Web 服務(wù)。
通俗的來講,Swagger 就是將項目中所有(想要暴露的)接口展現(xiàn)在頁面上,并且可以進(jìn)行接口調(diào)用和測試的服務(wù)。
PS:Swagger 遵循了 OpenAPI 規(guī)范,OpenAPI 是 Linux 基金會的一個項目,試圖通過定義一種用來描述 API 格式或 API 定義的語言,來規(guī)范 RESTful 服務(wù)開發(fā)過程。
Swagger 官網(wǎng)地址:https://swagger.io/Swagger 有什么用?
從上述 Swagger 定義我們不難看出 Swagger 有以下 3 個重要的作用:將項目中所有的接口展現(xiàn)在頁面上,這樣后端程序員就不需要專門為前端使用者編寫專門的接口文檔;
當(dāng)接口更新之后,只需要修改代碼中的 Swagger 描述就可以實時生成新的接口文檔了,從而規(guī)避了接口文檔老舊不能使用的問題;
通過 Swagger 頁面,我們可以直接進(jìn)行接口調(diào)用,降低了項目開發(fā)階段的調(diào)試成本。
使用步驟
1.pom導(dǎo)入swagger包以及knief
代碼如下(示例):
<properties> <swagger.version>2.9.2</swagger.version> <knife4j.version>2.0.2</knife4j.version> </properties> <!-- 在dependencies標(biāo)簽下添加如下, knife,是 swagger 的增強版,同一個作者開發(fā)。該UI增強包主要包括兩大核心功能:文檔說明 和 在線調(diào)試 --> <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調(diào)試了。
總結(jié)
這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
HttpClient實現(xiàn)調(diào)用外部項目接口工具類的示例
下面小編就為大家?guī)硪黄狧ttpClient實現(xiàn)調(diào)用外部項目接口工具類的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10Spring源碼學(xué)習(xí)之動態(tài)代理實現(xiàn)流程
這篇文章主要給大家介紹了關(guān)于Spring源碼學(xué)習(xí)之動態(tài)代理實現(xiàn)流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Springmvc nginx實現(xiàn)動靜分離過程詳解
這篇文章主要介紹了Springmvc nginx實現(xiàn)動靜分離過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09Java實現(xiàn)解析dcm醫(yī)學(xué)影像文件并提取文件信息的方法示例
這篇文章主要介紹了Java實現(xiàn)解析dcm醫(yī)學(xué)影像文件并提取文件信息的方法,結(jié)合實例形式分析了java基于第三方庫文件針對dcm醫(yī)學(xué)影像文件的解析操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-04-04Java GZip 基于內(nèi)存實現(xiàn)壓縮和解壓的方法
這篇文章主要介紹了Java GZip 基于內(nèi)存實現(xiàn)壓縮和解壓的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08