@1kbfree
2018-05-09T00:34:46.000000Z
字数 1369
阅读 1213
代码审计
选自:http://www.php0.net/index.php?m=content&c=index&a=show&catid=6&id=19166
只是给这篇文章里面的代码做一些注释,让更多的人看得懂~
if($operateId == 1){ //第一个{}开始
$date = date("Ymd"); //获取时间(Y是年;m是月;d是日)
$dest = $CONFIG->basePath."data/files/".$date."/"; //路径(以时间命名的文件夹)
$COMMON->createDir($dest); //创建这个文件夹
$nameExt = strtolower($COMMON->getFileExtName($_FILES['Filedata']['name'])); //获取上传的文件的后缀名并且都转成小写。
$allowedType = array('jpg', 'gif', 'bmp', 'png', 'jpeg'); //白名单思想,只有数组里面有的后缀名才能上传
if(!in_array($nameExt, $allowedType)){ //如果后缀名不在数组里
$msg = 0;
} //第一个{}结束
if(empty($msg)){ //如果$msg是""(空)、0、"0"、NULL、FALSE、array()、var $var那么返回True
$filename = getmicrotime().'.'.$nameExt; //这个是以时间来设置文件名(这个函数应该是他们自己写的,我也不知道功能是什么,大概就是获取时间吧~)
$file_url = urlencode($CONFIG->baseUrl.'data/files/'.$date."/".$filename); //拼接文件的地址
$filename = $dest.$filename; //文件绝对路径
if(empty($_FILES['Filedata']['error'])){ 如果错误报告为空(也就是没报错)
move_uploaded_file($_FILES['Filedata']['tmp_name'],$filename); //移动文件到文件绝对路径
}
if (file_exists($filename)){
$msg = $file_url;
@chmod($filename, 0444);
}else{
$msg = 0;
}
}
$outMsg = "fileUrl=".$msg;
$_SESSION["eoutmsg"] = $outMsg;
exit;
}
if (empty(0)){
echo 0;
}
/*
* 返回的结果为0
*/
$allowedType = array('jpg', 'gif', 'bmp', 'png', 'jpeg');
if(!in_array($nameExt, $allowedType)){
/*
* 这里的是判断后缀是否在数组中,如果在$msg的值为0,也就是说,不管我们上传的是不是合法文件,我们都可以上传,因为empty(0)也是返回True,写这个程序的程序员肯定是以为empty函数是判断变量是否存在的,其实并不是。因为误解所以才会这样操作,使$msg赋值为0,导致empty(0)返回的任然为True
*/
$msg = 0;
}