安全上传文件

时间:2014-02-04 18:54:26

标签: php security file-upload

我的php项目中有文件上传系统。

我在上传时做了什么:

1)检查文件扩展名和文件mime类型。

2)如果扩展名和mime类型是允许的类型,我将文件保存在public_html目录之外,然后,我给用户机会,下载文件,所以:

     if (file_exists($file_path)) {
            header('Content-Description: File Transfer');
            header('Content-Type: some mime type');
            header('Content-Disposition: attachment; filename=somefilename');
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($file_path));
            readfile($file_path);
     }

问题:上传文件的步骤是否安全?如果没有,可以增加什么,以提高上传文件的安全性?

感谢。

1 个答案:

答案 0 :(得分:2)

  • 检查MIME类型根本没用,因为可以制作这些信息。
  • 这取决于您如何检查文件扩展名以及您使用该信息执行的操作。尝试使用“白名单”代替“黑名单”。
  • 将它移到public_html之外是一个好主意,也尝试重命名该文件,只需添加扩展名即可。
  • 要小心使用压缩文件,你最终可能会遇到一些拉链炸弹或类似的东西。
  • 如果要对其进行某种操作,请小心使用该文件,例如调整图像大小。请记住,您正在处理将与您的代码交互的用户输入,并且可以精心利用您的代码(例如代码执行漏洞)。

另请尝试阅读this article,它会为您提供一些您可能以前不会遇到的有用信息。