AreaLoad

Autonomous Rubost External Area Upload System

AreaLoad源代码

AreaLoad的Github仓库

部署情况

目前我们仅仅在校内进行了小规模的试验,取得了良好的反馈,同时我们十分感谢以下课程的老师对我们平台的信任和支持!

重庆交通大学

  • Web技术基础结业报告
  • 大数据开发语言课程实验报告
  • 面向对象程序设计期末实验操作考试

设计特性

  • 没有复杂配置参数,极速部署
  • 限制上传学生的学号范围
  • 限制了上传文件的后缀名(7z,rar,zip)
  • 使用Securimage提供的图形验证码防止脚本攻击
  • 文件上传后即重命名,防止出现同学号不同文件名重复上传覆盖掉其他学生的作业
  • 上传文件大小限制为1Gib
  • 后端管理界面可动态地添加和删除课程和分类
  • 记录上传学生IP,用于后期统计

部署方法

0x00 Clone

首先Clone这个Repo

git clone https://github.com/LUNAD3v/areaload.git

0x01 Configure Nginx && PHP

我们喜欢Nginx,如果你用的是Nginx,那么在Nginx的全局(一般为/etc/nginx/nginx.conf)配置中,添加如下行

client_max_body_size 1000m;

PHP方面需要安装PDO,GD和sqlite3相关运行库。

由于Areaload追求的是轻量级,快速部署,我们使用了文件型数据库SQLite,为了防止数据库和学生上传的作业被通过HTTP的方式GET下来,记得在Nginx的Server Block中做一些配置。

location /db{
    return 403;
}

location /upload{
    return 403;
}

在/etc/php.ini中修改如下行:

upload_max_filesize = 1000M

0x02 Configure Areaload

在handler.php中加入可以上传的文件类型(默认只允许上传7z,rar,zip三种后缀的文件)

$FileType == "7z"
|| $FileType == "rar"
|| $FileType == "zip"

登录后台login.php,添加可以上传的学生列表。

部署工作到此为止。


使用方法

预备知识

AreaLoad通过课程ID和分类ID识别各个课程信息,出于防止恶意覆盖的情况发生,每门课程每个学生仅可以上传一次文件,所以,如果上传的文件有什么问题的话需要学生手动填写“申请重新上传”来通知管理员,管理员手动审核通过后让学生重新上传对应文件。

默认用户名为luna,密码为lunaareaload,登录后请修改密码。

创建课程

在后台可以创建课程,AreaLoad通过课程ID和分类ID识别各个课程信息,课程ID和分类ID必须使用英文名称,不可包括空格,引号等字符

这样我们便创建了一个课程,分类关系为:/dev/areaload-dev,类似的,我们创建第二门课程,此时/dev(开发)分类下就会有两门课程:areaload-dev和ldbs-dev。学生上传的文件会分别位于:/upload/dev/areaload-dev和/upload/dev/ldbs-dev下。

收取作业

只需点击“收作业”按钮即可!

收完作业后点一下“重置”,Areaload即可删除当前课程所有学生的上传数据,并为下一次上传作好准备。

处理Ticket

如果学生需要重新上传作业的话,需要填写“申请重新上传”:

在后台会看到如下内容,假设学号为“631607040102”的学生有两次不同的课程需要申请重新上传,我们需要同意AreaLoad开发的重新上传,此时需要在下方的文本框中分别输入该同学的学号和对应课程的ID,此处分别填写“631607040102”和“areaload-dev”,然后点击“删除对应学号学生的上传数据”,之后用合适的方式通知他/她重新上传对应课程。

允许上传的学生列表(Trustlist)

为了避免其他专业的学生在正经的平台上乱玩,Areaload默认只允许在Trustlist中包含的学号段的学生上传,通配符为"*"。

如:Trustlist中写的是"63160704****",则学号前缀为"63160704"的学生都可以上传。

LUNA是由重庆交通大学学生建立的非官方计算机协会。

明德行远,交通天下

CODE IS POETRY