PHP move_uploaded_file,它提供了什么安全性


PHP move_uploaded_file, what security does it provide

无论我在哪里查看PHP函数的renamemove_uploaded_file之间的差异,它总是说区别在于move_uploaded_file具有一些安全功能。

我的问题是:

  1. 这些安全功能是什么,如果我不使用它会发生什么?
  2. 如果我不能使用它(我上传了,但没有通过 POST ),所以我必须使用 rename 功能,我需要采取哪些安全措施?

谢谢。

编辑
@Pekka要求我详细说明我计划如何上传文件。我将通过 Ajax 上传文件,并且我有一些用于上传多个文件的队列功能。因此,我正在使用php://input流。

如果我正确理解了 Pekka 的答案,我就没有什么可担心的,因为我将文件作为流获取并且我没有复制任何临时文件。如果我错了,请纠正我。

其背景是一个古老的、非常糟糕的漏洞(在 2000 年代初期),在该漏洞中,您可以使用本地文件路径覆盖tmp_file路径,而不是上传实际文件,导致该本地文件被视为上传而不是真正的上传文件。(当时没有$_FILES阵列。

例如,

在上传头像时,脚本会将您指定的系统文件(例如,配置文件../../super_secret/config.php.htpasswdcopy()到公共位置,并尝试将其显示为<img>标签中的头像图像。

奇怪的是,我找不到有关此漏洞的任何具体信息(在过去的几年中我已经搜索了很多次),但我知道它存在,因为我自己测试了它。欢迎任何链接。

至于要采取哪些安全措施,如评论中所述,我认为您需要更详细地解释您计划使用哪种替代文件上传。