Java SpringBoot框架代码审计一 - 前期准备

本系列文章使用SpringBoot+Mybaits的小型商城作为本次代码审计的目标,项目地址:https://github.com/newbee-ltd/newbee-mall

SpringBoot+Mybatis这套架构使用较为广泛,相比于SpringMVC,SpringBoot简化了很多配置,更易上手使用。并且该项目属于小型系统,程序逻辑较为简单,作者编码规范,搭建也非常方便,只需要配置数据库(MySQL)和商品图片资源,SpringBoot自带中间件,无需额外配置中间件,方便调试,代码中没看懂的逻辑,下断点上手调试非常便捷,非常适合新手入门代码审计。

代码配置

从项目地址:https://github.com/newbee-ltd/newbee-mall 下载代码,在IntelliJ IDEA中导入pom.xml,IDEA会以maven项目打开并自动下载依赖包。

Spring属性文件路径:/src/main/resources/application.properties,其中可修改端口和mysql数据库地址

1
2
3
server.port=8089
...
spring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_db?...

配置文件路径:/src/main/java/ltd/newbee/mall/config/NeeBeeMallWebMvcConfigurer.java,其中配置了图片路径

1
2
3
4
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_DIC);
registry.addResourceHandler("/goods-img/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_DIC);
}

此时是没有测试数据的,需要将/src/main/resources/upload.zip压缩包中的测试商品数据解压出来,放到任意的目录中。此处作为学习测试使用,可以直接解压在当前路径下,正式系统中一定要存放在非项目路径下。

在文件src/main/java/ltd/newbee/mall/common/Constants.java中,变量FILE_UPLOAD_DIC为当前上传图片路径,将其更改为我们解压upload.zip绝对路径

1
2
3
4
5
public class Constants {
//上传文件的默认url前缀,根据部署设置自行修改
public final static String FILE_UPLOAD_DIC = "/some_path/src/main/resources/upload/";
//public final static String FILE_UPLOAD_DIC = "D:\\upload\\";//上传文件的默认url前缀,根据部署设置自行修改
}

MySQL数据库配置

过程中使用docker来快速搭建测试所需的数据库,docker方便更改测试过程中使用到的各组件版本,并且测试结束后可删除容器而不对本地环境造成任何影响。

使用其他方法安装mysql数据库也行,记得要在配置文件中更改mysql地址。代码部署在docker内也是可以的,不过考虑调试方便,还是建议直接本地运行代码,有远程调试经验的同学可以尝试将代码一同布置在docker内。

拉取mysql(latest为最新版本,需要其他版本可将lastest改为具体版本号即可)

1
docker pull mysql:latest

运行(因为仅作为测试环境,并且在容器里,所以将mysql密码设置为简单密码,非测试环境慎重)

1
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

进入容器,确定MySQL正常运行

1
2
3
4
5
docker exec -it mysql /bin/bash

root@815203ed6f5a:/# mysql -u root -p
Enter password: 123456
mysql> select @@version;

mysql-version

另起一个终端,将sql文件复制到容器内(8d3b6661cdd2是容器ID)

1
docker cp /some_path/newbee-mall/src/main/resources/newbee_mall_schema.sql 815203ed6f5a:/root

回到容器,建立数据库(如果这里更改了数据库名,需要同时修改application.properties中mysql连接的数据库名)

1
2
3
root:/# mysql -u root -p
mysql> create database newbee_mall_db;
mysql> exit

执行sql文件

1
root:/# mysql -u root -p newbee_mall_db</root/newbee_mall_schema.sql

进行简单的数据库查询,校验是否成功导入SQL。

1
2
mysql> use newbee_mall_db;
mysql> select * from tb_newbee_mall_admin_user;

mysql-import-sql

看到能成功查询我们导入的SQL,配置成功~(中文字符没显示出来,被?代替)

启动项目

以上步骤完成后,在IntelliJ IDEA中运行项目,访问在application.properties中配置的端口就能看到项目。

run-application