我的 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);
}
问题:这个上传文件的步骤安全不安全?如果没有,可以做些什么来提高上传文件的安全性?
谢谢。
最佳答案
- 检查 MIME 类型根本没有帮助,因为该信息是可以伪造的。
- 这取决于您如何检查文件扩展名以及您如何处理该信息。尝试使用“白名单”作为文件扩展名,而不是“黑名单”。
- 将其移到 public_html 之外是个好主意,也可以尝试重命名该文件并为其添加扩展名。
- 对压缩文件要格外小心,您最终可能会遇到一些 zipbomb 或类似的东西。
- 如果要对文件执行某种操作(例如调整图像大小),请小心处理该文件。请记住,您正在处理将与您的代码交互的用户输入,并且它可能会被精心设计来利用您的代码(例如代码执行漏洞)。
另请尝试阅读 this article ,它会给你一些以前可能没有的有用信息。
关于php - 安全上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560949/