Java安全—SpringBoot&Actuator&监控泄露&Swagger自动化

前言

今天依旧是SpringBoot框架,估计还要一篇文章才能把它写完,没办法,Java安全的内容太多了。

Actuator

SpringBoot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理Spring Boot应用,简单来说就是一个监控的模块。

项目搭建

同样还是先来搭建一个项目,新建一个项目叫Actuator-demo,注意这里第三方引用还是阿里云。

选择依赖项。

可以查看一下配置文件。

我们把项目运行一下,控制台可以看到默认访问路径。

访问可以看到一堆接口。

直接找了一张图片,可以对照各接口是干啥的。

Actuator的安全问题主要是信息泄露这一块,从上图不难发现如果没有做限制,那么我们访问的信息是很多的。

比如我访问http://127.0.0.1:8081/actuator/env,可以看到我整个环境的配置信息。

现在搞个图形化的界面就一目了然了,新建一个项目叫Actuator-client,依赖选择客户端的。

客户端配置文件如下,防止端口冲突,所以我改为8089。

接着再新建一个服务端的项目,叫Actuator-server,依赖项选择服务端的。

服务端的配置端口为改为8888,要和我们客户端的访问端口一样。

服务端启动文件这里要引入依赖。

把客户端项目和服务端项目都启动一下,访问127.0.0.0:8888,是一个图形化页面。

点击进去可以看到监控信息的图形化页面,

安全问题

很多的SpringBoot框架都会用到Actuator这个监控组件,首当其冲的安全问题就是heapdump泄漏,这是由于开发者不正确的配置所导致的。我们回答Actuator-demo这个项目,把它运行起来。

访问 http://127.0.0.1:8081/actuator/heapdump 把文件下载下来。

这个heapdump直接打开是查看不了滴,我们要用专门的查看工具,这里用jdk自带的工具jvisualvm.exe,在jdk的bin目录下面。

打开之后就可以看到一堆的配置信息。

这个自带的工具不会给你自动的提取信息,比如账号密码啥的,我们可以用JDumpSpider这个工具去帮助我们提取一些有用的信息。

https://github.com/whwlsfb/JDumpSpider/releases

复制代码
java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump

自动提取信息,比如什么OSS资源,账号密码等,因为我这里没有配置所以啥也没。

我们可以再新建一个项目去配置一些信息去验证一下,选择依赖项。

项目配置文件写入如下代码,配置一下数据库。

复制代码
server.port=8888
spring.datasource.url=jdbc:mysql://localhost:3306/demo1
spring.datasource.name=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

访问http://127.0.0.1:8888/actuator/heapdump 把heapdump文件下载下来,此时我们再用工具去提取信息,便可以看到数据库的密码和配置等。

只要我们在配置文件加入这两个行代码,那么env和heapdump就不再可以被访问。

复制代码
management.endpoint.heapdump.enabled=false
management.endpoint.env.enabled=false

Swagger

这是SpringBoot框架的一个接口系统,可以理解为它管理框架的所有接口,方便开发人员测试。

还是老规矩,新建一个项目叫swagger-demo,添加依赖。

由于SpringBoot并没有自带swagger的依赖,我们需要自己引入,分别有2版本和3版本的。二者并无太大的区别,如果你用的SpringBoot版本比较高,就可能会出现兼容性问题,我这里用的SpringBoot版本是阿里云的2.6.13,对于2和3版本的swagger都适用,如果你用3.x的SpringBoot可能会出现不兼容2版本的swagger。

可参考文章:https://blog.csdn.net/lsqingfeng/article/details/123678701

复制代码
<--2.9.2版本-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>

可以看到导入的依赖。

如果有端口冲突就修改一下配置文件,并且加一句代码,不然会报错。

访问http://127.0.0.1:8002/swagger-ui.html

我这里写了一些接口,比如什么hello、user、theonefx。

在swagger页面我们都可以看到。

为了更加直观,我们新建一个Java类,叫Testcontroller,并且写入以下代码,一个是POST传那么参数,一个是get传name参数。

复制代码
@Controller
public class TestController {

    @GetMapping("/getdata")
    @ResponseBody
    public String getdata(@RequestParam String name){
        return "get have data " +name;
    }

    @PostMapping("/postdata")
    @ResponseBody
    public String postdata(@RequestParam String name){
        return "post have data " +name;
    }
}

此时我们再重新运行项目,可以看到多了个test-controller的测试接口。

点开确实是我们写好的接口,参数也帮你写好了。

我们随便填个参数测试一下,也是没问题的。

在实战中往往会有很多的接口,几百上千个,我们不可能一个一个地去提交数据测试,那咋办呢,这里用到我们之前说过的一个工具postman,去实现自动化测试。

首先复制我们的api。

点击API,选择Import导入。

选择链接导入。

可以看到有啥接口都给我们显示出来了。

点击Run会帮你全部测试一遍,不知道为啥我这里只有一个返回,可能配置啥的不对。

对于这个swagger一般都是接口泄露,比如什么登录接口、文件上传接口。

总结

本次主要讲了Actuator和swagger这两个常见的SpringBoot组件,主要的利用点都是信息泄露。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

相关推荐
wowocpp29 分钟前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
独泪了无痕1 小时前
MongoTemplate 基础使用帮助手册
spring boot·mongodb
厦门辰迈智慧科技有限公司2 小时前
城市综合管廊监测与维护一体化解决方案
物联网·自动化·监测
獨枭4 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架4 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱4 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
Q_Q19632884754 小时前
python的家教课程管理系统
开发语言·spring boot·python·django·flask·node.js·php
sy_cora6 小时前
IEEE 列表会议第五届机器人、自动化与智能控制国际会议
运维·人工智能·机器人·自动化
秋野酱6 小时前
基于javaweb的SpringBoot驾校预约学习系统设计与实现(源码+文档+部署讲解)
spring boot·后端·学习
北辰浮光6 小时前
[springboot]SSM日期数据转换易见问题
java·spring boot·后端