Swagger API 未授权访问漏洞
Swagger API 未授权访问漏洞
详细描述
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。相关的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
Swagger生成的API文档,是直接暴露在相关web路径下的。所有人均可以访问查看。通过这一点即可获取项目上所有的接口信息。那么结合实际业务,例如如果有文件读取相关的接口,可能存在任意文件下载,相关的业务访问可能存在未授权访问等。
修复建议
- 在生产节点禁用Swagger2:
- 使用注解
@Profile({"dev","test"})
表示在开发或测试环境开启,而在生产关闭。 - 使用注解
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
然后在测试配置或者开发配置中 添加 swagger.enable = true 即可开启,生产环境不填则默认关闭Swagger。 - 在配置文件里添加一个
swagger.enable
属性,根据不同的application-xx.yml
进行动态插入true
或false
即可。然后在Swagger配置中进行设置:
- 使用注解
@Value("${swagger.enable}")
private Boolean enable;
@Bean
public Docket swaggerPersonApi10() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("org.demo.swagger2.controller"))
.paths(PathSelectors.any())
.enable(enable)
.build()
.apiInfo(apiInfo());
}
好学若饥,谦卑若愚