当前位置:首页 > PHP教程 > php上传下载 > 列表

PHP识别文件伪装(文件上传)

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-29 08:45:05 浏览: 评论:0 

问题:文件上传时候需要验证上传的文件是否合法,文件伪装如何识别?

一个简单测试:把txt文件后缀直接改成jpg;上传

  1. <!DOCTYPE html> 
  2.  
  3. <html> 
  4.  
  5.     <title>test</title> 
  6.  
  7.     <body> 
  8.  
  9.         <form enctype="multipart/form-data" action="test.php" method="POST"> 
  10.  
  11.             <!-- MAX_FILE_SIZE must precede the file input field --> 
  12.  
  13.             <input type="hidden" name="MAX_FILE_SIZE" value="102400" /> 
  14.  
  15.             <!-- Name of input element determines name in $_FILES array --> 
  16.  
  17.             Send this file: <input name="userfile" type="file" /> 
  18.  
  19.             <input type="submit" value="Send File" /> 
  20.  
  21.         </form> 
  22.  
  23.     </body> 
  24.  
  25. </html> 

1.通过$_FILES['userfile']['type'];获取文件后缀名;

  1. $data = $_FILES['userfile']; 
  2.  
  3. var_dump($data); 
  4.  
  5. /**结果**/ 
  6.  
  7. /* 
  8.  
  9. array(5) { 
  10.  
  11.   ["name"]=> 
  12.  
  13.   string(8) "test.jpg" 
  14.  
  15.   ["type"]=> 
  16.  
  17.   string(10) "image/jpeg" 
  18.  
  19.   ["tmp_name"]=> 
  20.  
  21.   string(26) "/private/var/tmp/phpfyE3EC" 
  22.  
  23.   ["error"]=> 
  24.  
  25.   int(0) 
  26.  
  27.   ["size"]=> 
  28.  
  29.   int(19) 
  30.  
  31. } 
  32.  
  33. */ 

没有检测出来;

2.用pathinfo()函数来获取文件路径的信息

  1. $data = $_FILES['userfile']; 
  2.  
  3. // var_dump($data); 
  4.  
  5. var_dump(pathinfo($data['name'])); 
  6.  
  7. /**结果**/ 
  8.  
  9. /* 
  10.  
  11. array(4) { 
  12.  
  13.   ["dirname"]=> 
  14.  
  15.   string(1) "." 
  16.  
  17.   ["basename"]=> 
  18.  
  19.   string(8) "test.jpg" 
  20.  
  21.   ["extension"]=> 
  22.  
  23.   string(3) "jpg" 
  24.  
  25.   ["filename"]=> 
  26.  
  27.   string(4) "test" 
  28.  
  29. } 
  30.  
  31. */ 

没有检测出来;

3.PHP的扩展fileinfo(需要安装开启)

  1. $data = $_FILES['userfile']; 
  2.  
  3. $filename = $data['tmp_name']; 
  4.  
  5. $finfo   = finfo_open(FILEINFO_MIME_TYPE);//返回 mime 类型。 自 PHP 5.3.0 可用。 
  6.  
  7. $mimetype = finfo_file($finfo$filename); 
  8.  
  9. finfo_close($finfo); 
  10.  
  11. var_dump($mimetype); 
  12.  
  13. /**结果**/ 
  14.  
  15. //string(10) "text/plain" 

可!可!可!监测到文件mime类型并不是一个jpg!

Tags: PHP识别文件伪装

分享到: