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组件,主要的利用点都是信息泄露。

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

相关推荐
张3蜂7 小时前
Stagehand深度解析:从开源自动化工具到企业级RPA平台的演进之路
开源·自动化·rpa
smileNicky9 小时前
SpringBoot系列之从繁琐配置到一键启动之旅
java·spring boot·后端
柏油12 小时前
Spring @TransactionalEventListener 解读
spring boot·后端·spring
小小工匠14 小时前
Maven - Spring Boot 项目打包本地 jar 的 3 种方法
spring boot·maven·jar·system scope
qq_5260991314 小时前
工控机的用途与介绍:工业自动化的重要引擎
嵌入式硬件·自动化·电脑
板板正15 小时前
Spring Boot 整合MongoDB
spring boot·后端·mongodb
泉城老铁16 小时前
在高并发场景下,如何优化线程池参数配置
spring boot·后端·架构
泉城老铁16 小时前
Spring Boot中实现多线程6种方式,提高架构性能
spring boot·后端·spring cloud
hrrrrb17 小时前
【Java Web 快速入门】九、事务管理
java·spring boot·后端
布朗克16819 小时前
Spring Boot项目通过RestTemplate调用三方接口详细教程
java·spring boot·后端·resttemplate