/public/index.php
文件已经被删了,我说打开网站怎么老是 404
用的 ThinkPHP V5.1.29 LTS ,我才发现有一个 /admin
文件夹,没有鉴权,任何人都能用,本意我是拿来上传成绩的,考虑到也就只有为数不多的人用,也就没有去管了,检查了下代码,就只有一处有上传文件的代码,各位审计下哪里有问题:
//导入成绩
public function import()
{
$semester = intval(Request::param('semester', '0'));//第几个学期
$find = Db::table('final_grade_index')->where('semester', $semester)->find();
if($semester < 1 || $find === null){
return json([
'code' => 1,
'msg' => '不存在该学期,请重新选择“哪个学期”!'
]);
}
if($find['import'] !== 0){
return json([
'code' => -1,
'msg' => '第 '.$semester.' 学期的期末成绩数据已经导入了,请确认无误后再上传!'
]);
}
if($_FILES['exam_data']['error'] > 0){
return json([
'code' => -2,
'msg' => '上传文件失败,请稍后再试!'
]);
}
if(substr($_FILES['exam_data']['name'], -4)!=='.csv' || $_FILES['exam_data']['type'] !== 'application/vnd.ms-excel'){
return json([
'code' => -3,
'msg' => '仅能够上传 .csv 文件!'
]);
}
if($_FILES['exam_data']['size'] > 1048576){
return json([
'code' => -4,
'msg' => '文件大小超出限制,只能够上传小于或等于 1MB 的文件,请重新选择!'
]);
}
$tmp = file_get_contents($_FILES['exam_data']['tmp_name']);
$tmp = str_replace("\r\n", "\n", $tmp);
$tmp = trim($tmp, "\xEF\xBB\xBF");
$arr = explode("\n", $tmp);
$arr_count = count($arr);
unset($arr[$arr_count-1]);
$field = explode(",", $arr[0]);
$i = 0;
$data = [];
foreach ($arr as $k=>$v) {
if($k > 0){
$ex = explode(",", $v);
foreach ($field as $key=>$value) {
if($key === 'semester'){
$value = $semester;
}
$data[$i][$value] = $ex[$key];
}
if(!isset($field['semester'])){
$data[$i]['semester'] = $semester;
}
$i += 1;
}
}
try{
Db::table('final_grade_index')
->where('semester', $semester)
->data(['import' => 1])
->update();//更新索引,表明已经导入数据
Db::table('final_grade')
->insertAll($data);//插入数据
$this->score_sort();//成绩排名
}catch (\Exception $e){
return json([
'code' => -5,
'msg' => '[SERVER_ERROR]请稍后再试'
]);
}
return json([
'code' => 0,
'msg' => '导入数据成功!'
]);
}
!!!
健健康康