1.问题描述
客户线上环境,第三方进行安全检测时候,反馈来一个"Spring"接口未授权访问漏洞。如图:
2.后端框架
服务平台后端采用开源框架BladeX微服务版本。BladeX 是由一个商业级项目升级优化而来的SpringCloud微服务架构,采用Java8 API重构了业务代码,完全遵循阿里巴巴编码规范。采用Spring Boot 2 、Spring Cloud Greenwich 、Mybatis 等核心技术,同时提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS微服务系统平台。
3.问题定位
BladeX微服务框架中,gateway作为API的网关,是所有请求的闸口,可以通过入口位置对Swagger资源进行访问拦截,可以解决资源暴露问题。
- 查找网关模块中,关于“swagger-resources”资源路由规则,获取资源处理器,如下图:
- 查看gateway模块中的Swagger资源处理器源码,可见该资源处理器除了响应资源外,并没有其他处理,如下图:
4.解决方法
既然找到了gateway对swagger资源的处理器,直接修改该处理器,添加拦截规则就行了。本示例在添加拦截时候,判断了一下环境参数。只有生产环境才拦截swagger资源访问,开发和测试环境还是允许访问swagger资源,方便调试。再进一步的话,还可以将该参数作为一项配置进行处理,匹配对应的启动环境。具体代码如下:
/** Copyright (c) 2018-2028, Chill Zhuang All rights reserved.