Swagger API 信息泄露漏洞

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。相关的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

Swagger生成的API文档,是直接暴露在相关web路径下的。所有人均可以访问查看。通过这一点即可获取项目上所有的接口信息。那么结合实际业务,例如如果有文件读取相关的接口,可能存在任意文件下载,相关的业务访问可能存在未授权访问等。

解决办法

  1. 在生产节点禁用Swagger2,在maven中禁用所有关于Swagger包(不建议)
  2. 结合SpringSecurity/shiro进行认证授权,将Swagger-UI的URLs加入到各自的认证和授权过滤链中,当用户访问Swagger对应的资源时,只有通过认证授权的用户才能进行访问。
swagger:config:# 开启身份认证功能login: trueusername: admin@190610password: admin@190610
  1. 结合nginx/Filter对对应的接口端点进行访问控制。
    enable = false 关闭
 @Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(false).select()//为当前包路径.apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();}