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


why php uploaded files are stored temporarily in a temporary directory

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

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

我想最好使用某种客户端代码,但我之所以这么问,是因为没有人把它作为的选项

(如果使用客户端代码评估文件更好,那么如何进行?)

提前感谢

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

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

你并不真的希望在你的"生产用户文件目录"中有不安全的文件(例如PHP代码或其他不好的东西),因为这可能会产生一些其他影响(比如可能已经影响了网站统计数据的显示等)

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

这样做有几个原因。

首先,它减少了被中断上传的可能性(例如,如果服务器在上传文件时断电)。

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

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