漏洞描述:
| 受影响站点 | xxx.xxx.xxx.xxx |
|---|---|
| 详细描述 | Swagger UI允许任何人(无论您是开发团队还是最终用户)都可以可视化API资源并与之交互,而无需任何实现逻辑。它是根据您的OpenAPI(以前称为Swagger)规范自动生成的,具有可视化文档,可简化后端实现和客户端使用。 |
| 解决办法 | 如果生产环境不使用Swagger-UI,可以关闭此应用 |
| 威胁分值 | 5 |
| 危险插件 | 否 |
| 发现日期 | 2001-01-01 |
| CVSS评分 | 5.3(CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
1、项目中关闭swagger
配置文件application.yml中配置

# Swagger配置
swagger:
# 是否开启swagger,false为关闭,如果想开启就改为true。
enabled: false
2、到这里其实已经关闭了swagger,但是安全扫描还是不能通过,因为访问swagger-ui.html路径会跳出提示swagger已关闭的页面,而安全扫描应该是只要返回的页面中含有swagger的字符,就会不通过,这里还需要进一步增加拦截器,让访问swagger-ui.html页面直接返回404(返回可自定义)。
增加一个Swagger拦截器,监听到请求中包含有关于Swagger的请求时返回自定义的返回页面
package com.ruoyi.framework.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Swagger拦截器
*/
@Component
public class SwaggerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestUri = request.getRequestURI();
if (requestUri.contains("swagger-ui") || requestUri.contains("/tool/swagger")) { // 若依swagger接口/tool/swagger也会重定向到swagger,所以也要屏蔽
response.sendRedirect("/404"); // 可以重定向到自定义的错误页面
return false;
}
return true;
}
}
然后在若依通用配置类ResourcesConfig中自定义拦截规则方法中添加代码此registry.addInterceptor(new SwaggerInterceptor()).addPathPatterns("/**")代码,参考如下: 
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
/**
* 首页地址
*/
@Value("${shiro.user.indexUrl}")
private String indexUrl;
/** 是否开启swagger */
@Value("${swagger.enabled}")
private boolean enabled;
@Autowired
private RepeatSubmitInterceptor repeatSubmitInterceptor;
@Autowired
private StaticMapFileInterceptor staticMapFileInterceptor;
/**
* 默认首页的设置,当输入域名是可以自动跳转到默认指定的网页
*/
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
registry.addViewController("/").setViewName("forward:" + indexUrl);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
/** 本地文件上传路径 */
registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");
/** swagger配置 */
registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
}
/**
* 自定义拦截规则
*/
@Override
public void addInterceptors(InterceptorRegistry registry)
{
registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
registry.addInterceptor(staticMapFileInterceptor).addPathPatterns("/**");
if(!enabled){
registry.addInterceptor(new SwaggerInterceptor()).addPathPatterns("/**");
}
}
}
完毕。
本文介绍了如何在SpringMVC项目中关闭SwaggerUI功能,避免安全扫描因访问该页面失败而误报。通过配置文件和创建Swagger拦截器,确保对Swagger相关请求返回404,从而提高安全性。

324

被折叠的 条评论
为什么被折叠?



