为什么php上传的文件暂时存储在临时目录

时间:2016-04-12 05:01:46

标签: php

在我阅读文件上传表单的所有教程中首先提交,然后评估临时目录中的文件以决定是否应将其移动到永久目录...我的问题是:什么&# 39;那是什么意思?

如果文件是由攻击者上传的,并且它的可执行文件在评估和删除之前不会对系统造成损害? 除此之外,用户是否必须等待文件上传才发现该文件无法上传,因为它没有预期的格式?

我认为最好使用某种客户端代码,但我要问,因为没有人将其作为选项提出

(如果使用客户端代码评估文件更好,它是如何完成的?)

提前致谢

2 个答案:

答案 0 :(得分:1)

首先(非常重要):始终在服务器端验证用户输入。但您仍然可以在客户端另外验证用户输入 (可用性)原因)。

正如您已经假设的那样,这是出于安全原因。

您并不真正想要在“生产用户文件目录”中使用不安全的文件(例如PHP代码或其他不良内容),因为这可能会产生一些其他影响(例如,可能已经影响了网站统计信息的显示等)。 / p>

因此,在将上传的用户文件移动到正确的目录之前,您应该根据业务规则(例如,没有可执行代码,最大文件大小等)确保文件正常,然后移动它。此临时上载目录应始终为非公共目录(这意味着Web服务器无权访问它)。

答案 1 :(得分:1)

这样做的原因有几个。

首先,它使中断上传的可能性降低(例如,如果服务器在上传文件时遇到停电状态)。

其次,它确保上传目录中的所有文件都完整。当您读取上传目录中的文件时,您将不会读取任何部分数据。

最后,它允许将尚未验证的文件(例如检查其文件类型)与具有的文件分开。