添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本系列文章使用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;

另起一个终端,将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;

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

启动项目

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