本项目的设计,放弃了C/S系统,而是采用B/S系统,即浏览器/服务器系统。之所以采用B/S的体系结构,主要考虑到系统的方便性,用户无需安装客户端即可使用该系统,这样给本系统的用户减少了很多不必要的麻烦,而且方便对系统进行更新维护。使用的框架主要是Mybatis+Spring+SpringMVC框架,即当今较为流行的SSM框架,SSM框架基于MVC模型。MVC模型的结构包括Model模型层,View视图层,Controller控制层。在线答题平台的架构主要分为6个层次,包括前端UI、展示层、业务层、数据层、数据库和运行环境,如下图为系统的系统架构图:
本系统搭建时选用时选用Java作为开发语言,采用SSM框架,前端我们暂定html+css+JavaScript开发,后续使用什么框架待定。同时,本项目的一个重难点是分布式独立靶机的搭建,因为CTF中的web方向与PWN方向的答题环节需要搭建在在线环境中,每个用户要去答题,则需要生成一个独立的在线环境,各用户之间的操作不会影响到别人的在线环境,用户最终要从在线环境中抽丝剥茧找到最终的答案即flag,这就需要到了分布式独立靶机,
本项目决定使用Docker技术进行分布式独立靶机的搭建。如下图所示,docker比传统虚拟机更加轻便,传统虚拟机启动耗时为分钟级别,而Docker容器启动仅为秒级别,这极大的提高了用户体验。且每个容器相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能够给不同的用户提供不同的环境,使得相互之间的操作互不干扰。Docker实现了“一次构建、随处运行”,因此我们可以将用户所需的靶机环境封装进入一个镜像,当发出靶机构建请求时,便会构建该镜像的实例即容器,进而成功搭建靶机环境。
综上,本项目各项技术与工具选择如下:
因为本系统采用B/S系统,因此用户通过web浏览器便可使用我们的系统。
本系统采用B/S架构,系统提供给普通用户的接口WEBAPI如下图所示:
系统提供给管理员的接口WEBAPI如下图所示:
本系统采用MVC框架,下图展现了软件模块之间的依赖关系与MVC模型的逻辑流。
属性名
类型
是否可为空
描述
user_id
integer
N
用户编号
username
varchar
用户名
nickname
昵称
password
密码
sex
Y
性别
telephone
手机号
school
学校
introduction
个人简介
user_points
用户积分
solved_problems
解题数
user_images
用户头像
team_id
队伍编号
problem_id
题目编号
problem_titile
题目标题
difficulty
难度系数
problem_description
题目描述
problem_scene
题目场景
problem_appendix
题目附件
problem_answer
题目答案
problem_points
题目积分
problem_type_id
题目类型编号
problem_area
题目区域类型
answer_id
用户答案编号
answer_content
答案内容
answer_time
time
contest_id
竞赛编号
contest_title
竞赛主题
sponsor
varvhar
主办方
start_time
end_time
contest_introduction
竞赛介绍
team_nums
参赛队伍数
team_name
战队名称
leader_id
队长id
战队人数
team_points
战队积分
team_create_time
goods_id
商品编号
goods_name
商品名
goods_points
商品所需积分
goods_stock
商品库存
goods_offer
商品提供方
explanation_id
题解编号
explanation_content
题解内容
problems_id
发布者编号
explanation_time
项目源代码的目录文件结构如下图所示:
项目名称为ctfplatform,main目录向下细分为如下几个目录: