无论我在哪里查看 PHP 函数之间的差异rename
,move_uploaded_file
它总是说差异在于move_uploaded_file
具有一些安全功能。
我的问题是:
rename
功能,我需要采取什么安全措施?谢谢。
编辑
@Pekka 要求我详细说明我计划如何上传文件。我将通过 Ajax 上传文件,并且我有一些用于上传多个文件的队列功能。因此我正在使用php://input
流。
如果我正确理解 Pekka 的答案,我就没有什么可担心的,因为我将文件作为流获取,并且我没有复制任何临时文件。如果我错了,请纠正我。
其背景是一个古老的、相当严重的漏洞(2000 年代初),您可以使用tmp_file
本地文件路径覆盖路径,而不是上传实际文件,从而导致该本地文件被视为上传文件真实上传的文件。$_FILES
(当时还没有阵列。)
例如,当上传头像时,脚本会将copy()
您指定的系统文件(例如配置文件../../super_secret/config.php
或.htpasswd
)发送到公共位置,并尝试将其显示为标签中的头像图像<img>
。
奇怪的是,我无法找到有关此漏洞的任何具体信息(在过去几年中我已经搜索过多次),但我知道它确实存在,因为我自己测试了它。欢迎任何链接。
至于采取什么安全措施,正如评论中所说,我认为您需要更详细地解释您打算使用哪种替代文件上传。