修复SpringBoot Actuator未授权访问遇到的问题

这篇具有很好参考价值的文章主要介绍了修复SpringBoot Actuator未授权访问遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原由:风险检测扫出漏洞

访问http://xxx.xx.x/actuator 会直接获取到系统监控信息,存在安全问题,禁用actuator

1.禁用/env接口

缺点:谁都不可以访问不够灵活

会展示部分信息,漏扫严格的话建议替换其他方法

management:
  endpoint:
    env:
      enabled: false

2.直接屏蔽所有端口

缺点:谁都不可以访问不够灵活

management:
  endpoints:
    web:
      exposure:
        include: "*"
    enabled-by-default: false

3.引入spring-boot-starter-security依赖,增加登录认证

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置文件增加

spring:
  security:
    user:
      name: admin
      password: admin
management:
  server:
    port: 8099
  endpoints:
    web:
      exposure:
        include: "*"

 4.添加全局过滤拦截类,增加登录认证

在项目目录新建config文件夹,新建下面两个文件

1. ActuatorFilter

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Base64;
import java.util.Enumeration;

public class ActuatorFilter implements Filter {

    public static final Logger logger = LoggerFactory.getLogger(ActuatorFilter.class);

    public static final String ACTUATOR_SESSION = "ActuatorBasicAuthSession";

    private String userName;

    private String password;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Enumeration<String> enumeration = filterConfig.getInitParameterNames();
        if (enumeration.hasMoreElements()) {
            this.userName = filterConfig.getInitParameter("actuatorUserName");
            this.password = filterConfig.getInitParameter("actuatorPassword");
        }
        logger.info("ActuatorFilter init success");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String path = request.getRequestURI();
        //可以把所有暴露出来的端点路径放在一个集合里面进行判断
        if (path.startsWith("/actuator")) {
            Object actuatorSessionValue = request.getSession().getAttribute(ACTUATOR_SESSION);
            if (actuatorSessionValue == null || !userName.equals(actuatorSessionValue)) {
                String auth = request.getHeader("Authorization");
                if (auth != null && !"".equals(auth)) {
                    //解析认证参数
                    String userAndPass = this.decodeBase64(auth.substring(6));
                    String[] upArr = userAndPass.split(":");
                    if (upArr.length != 2) {
                        this.writeForbiddenCode(response);
                        return;
                    }
                    String iptUser = upArr[0];
                    String iptPass = upArr[1];
                    if (iptUser.equals(this.userName) && iptPass.equals(this.password)) {
                        request.getSession().setAttribute(ACTUATOR_SESSION, this.userName);
                        filterChain.doFilter(request, response);
                        return;
                    }
                    this.writeForbiddenCode(response);
                    return;
                } else {
                    this.writeForbiddenCode(response);
                    return;
                }
            }
        }
        filterChain.doFilter(request, response);
    }

    /**
     * 未认证时返回401认证页面
     *
     * @param httpServletResponse
     * @throws IOException
     */
    private void writeForbiddenCode(HttpServletResponse httpServletResponse) throws IOException {
        httpServletResponse.setStatus(401);
        httpServletResponse.setHeader("WWW-Authenticate", "Basic realm=\"input Actuator Basic userName & password \"");
        httpServletResponse.getWriter().write("没有权限访问当前资源");
    }

    private String decodeBase64(String source) {
        String decodeStr = null;
        if (source != null) {
            try {
                byte[] bytes = Base64.getDecoder().decode(source);
                decodeStr = new String(bytes);
            } catch (Exception var4) {
                this.logger.error(var4.getMessage(), var4);
            }
        }

        return decodeStr;
    }
}

2. WebMvcConfig

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public FilterRegistrationBean actuatorFilter () {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new ActuatorFilter());
        registrationBean.setName("actuator");
        registrationBean.addUrlPatterns("/*");
        registrationBean.setOrder(Integer.MAX_VALUE);

        //用户名密码可以配置在配置文件中或者配置中心
        registrationBean.addInitParameter("actuatorUserName", "admin");
        registrationBean.addInitParameter("actuatorPassword", "123456");
        return  registrationBean;
    }
}

配置文件增加

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always
  1. never:不展示详细信息,up或者down的状态,默认配置
  2. when-authorized:详细信息将会展示给通过认证的用户。授权的角色可以通过management.endpoint.health.roles配置
  3. always:对所有用户暴露详细信息

建议用方法3增加security的认证文章来源地址https://www.toymoban.com/news/detail-509721.html

到了这里,关于修复SpringBoot Actuator未授权访问遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot Actuator未授权访问漏洞

    Spring Boot Actuator 端点的未授权访问漏洞是一个安全性问题,可能会导致未经授权的用户访问敏感的应用程序信息。 可是并不用太过担心,Spring Boot Actuator 默认暴漏的信息有限,一般情况下并不会暴露敏感数据。 注册中心有些功能集成了actuator,如果同时使用eureka和actuator,可

    2024年02月13日
    浏览(30)
  • 如何解决 Spring Boot Actuator 的未授权访问漏洞

    Spring Boot Actuator  的作用是提供了一组管理和监控端点,允许你查看应用程序的运行时信息,例如健康状态、应用程序信息、性能指标等。这些端点对于开发、 测试  和运维团队来说都非常有用,可以帮助快速诊断问题、监控应用程序的性能,并采取必要的措施来维护和管理

    2024年02月07日
    浏览(25)
  • spring boot actuator 未授权访问(env泄露redis密码)

    Actuator Actuator是Spring Boot提供的服务监控和管理中间件,默认配置会出现接口未授权访问,部分接口会泄露网站流量信息和内存信息等,使用Jolokia库特性甚至可以远程执行任意代码,获取服务器权限。 渗透过程 访问浏览器访问actuator 访问env获取到敏感信息redis服务器地址以及

    2024年02月11日
    浏览(27)
  • Springboot之Actuator的渗透测试和漏洞修复

    Actuator 的 REST 接口 Actuator监控分成两类:原生端点和用户自定义端点;自定义端点主要是指扩展性,用户可以根据自己的实际应用,定义一些比较关心的指标,在运行期进行监控。 原生端点是在应用程序里提供众多 Web 接口,通过它们了解应用程序运行时的内部状况。原生端

    2024年02月03日
    浏览(29)
  • springboot 项目访问静态资源遇到的问题,WebMvcConfigurer和WebMvcConfigurationSupport

    之前发过通过继承WebMvcConfigurationSupport来访问静态资源的文章——img标签访问静态资源,代码如下 这个方法是可行的,但会带来一个小问题。 像这些本身就要访问静态资源的,它们一般是实现了WebMvcConfigurer,而不是继承WebMvcConfigurationSupport。 当我们用上面代码中的方法访问

    2024年01月21日
    浏览(47)
  • 【解决问题】在SpringBoot中通过配置Swagger权限解决Swagger未授权访问漏洞

    Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。其中,Swagger-UI会根据开发人员在代码中的设置来自动生成API说明文档。若存在相关的配置缺陷,攻击者可以在未授权的状态下,翻查Swagger接口文档,得到系统功能API接口的详细参数,再

    2024年02月02日
    浏览(32)
  • 修复zookeeper未授权访问漏洞

    在用kafka_2.13-3.3.1集成的zookeeper时,发现存在未授权访问漏洞,以下是解决授权问题的方法。同理也适用于单独的zookeeper,除了进入zookeeper客户端的命令有所不同,其他过程一样。 1、查看是否有监听2181端口 2、如果没有执行在kafka目录执行 3、进入zk客户端 4、授权账号、密码

    2024年04月09日
    浏览(64)
  • Nacos未授权访问修复方案

    Nacos 是 SpringCloud Alibaba 微服务架构中的一个组件,主要作用是服务注册和发现以及分布式配置管理,通常情况下 Nacos 中存储着 MySQL、Redis 等数据库的账号和密码。当前使用的版本存在用户读取、添加、登陆的漏洞。 通过版本漏洞,攻击者可以在不登陆系统的情况下读取已存

    2024年02月14日
    浏览(24)
  • ElasticSearch9200端口未授权访问漏洞修复

    ElasticSearch 是一款Java编写的企业级搜索服务,启动此服务默认会开放HTTP-9200端口,可被非法操作数据。 例如 ip:9200/_cat可以直接访问等。。 高危 9200端口不对外开放,如需开放,需在安全组限制只允许指定IP才能访问9200端口 // accept // drop // 保存规则 重启iptables 这就成功了,亲

    2024年02月11日
    浏览(38)
  • MongoDB未授权访问漏洞验证与修复过程

    环境:Windows,MongoDB3.2 本文是Windows!Windows!Windows!环境下 可以看到该ip存在MongoDB未授权访问漏洞,没有进行身份验证 可以看到连接被拒绝

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包