问题:

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

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

<!DOCTYPE html><html>    <title>test</title>    <body>        <form enctype="multipart/form-data" action="test.php" method="POST">            <!-- MAX_FILE_SIZE must precede the file input field -->            <input type="hidden" name="MAX_FILE_SIZE" value="102400" />            <!-- Name of input element determines name in $_FILES array -->            Send this file: <input name="userfile" type="file" />            <input type="submit" value="Send File" />        </form>    </body></html>

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

$data = $_FILES['userfile'];var_dump($data);/**结果**//*array(5) {  ["name"]=>  string(8) "test.jpg"  ["type"]=>  string(10) "image/jpeg"  ["tmp_name"]=>  string(26) "/private/var/tmp/phpfyE3EC"  ["error"]=>  int(0)  ["size"]=>  int(19)}*/

没有检测出来;

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

$data = $_FILES['userfile'];// var_dump($data);var_dump(pathinfo($data['name']));/**结果**//*array(4) {  ["dirname"]=>  string(1) "."  ["basename"]=>  string(8) "test.jpg"  ["extension"]=>  string(3) "jpg"  ["filename"]=>  string(4) "test"}*/

没有检测出来;

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

$data = $_FILES['userfile'];$filename = $data['tmp_name'];$finfo   = finfo_open(FILEINFO_MIME_TYPE);//返回 mime 类型。 自 PHP 5.3.0 可用。$mimetype = finfo_file($finfo, $filename);finfo_close($finfo);var_dump($mimetype);/**结果**///string(10) "text/plain"

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

更多相关php知识,请访问php教程!

更多相关文章

  1. PHP作用域和文件夹操作示例
  2. PHP 枚举类型的管理与设计
  3. php实现将文件上传到临时目录
  4. php怎么把文件设置为插件
  5. 关于检测文件是否有病毒的PHP实现逻辑
  6. php获取文件夹中文件的两种方法
  7. 了解PHP文件上传相关知识
  8. php删除文件的方法
  9. php文件锁产生的问题和解决方案(一个真实案例)

随机推荐

  1. 答应我,用了这个jupyter插件,别再重复造轮
  2. Python 3.9,来了!
  3. 用了这个jupyter插件,我已经半个月没打开
  4. Jupyter Notebook & Lab快捷键大全
  5. 掌握pandas中的transform
  6. Vaex :突破pandas,快速分析100GB大数据集
  7. 纯Python绘制满满艺术感的山脊地图
  8. 来,一起打卡!
  9. JavaScript中的持续传递风格 [每日前端夜
  10. 【开发者必看】移动应用趋势洞察白皮书-