绿盟Web应用扫描检测到目标站点使用Swagger API文档解决方式

本文介绍了如何在SpringMVC项目中关闭SwaggerUI功能,避免安全扫描因访问该页面失败而误报。通过配置文件和创建Swagger拦截器,确保对Swagger相关请求返回404,从而提高安全性。

漏洞描述:

受影响站点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("/**");
        }
    }
}

完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值