@1kbfree
        
        2018-05-08T16:34:46.000000Z
        字数 1369
        阅读 1485
    代码审计
选自: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;}

