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

时间:2012-08-12 16:23:50

标签: php file-upload

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

我的问题是:

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

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

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

1 个答案:

答案 0 :(得分:2)

这背景是一个古老的,非常糟糕的漏洞(在21世纪初期),您可以使用本地文件路径覆盖tmp_file路径而不是上传实际文件,从而导致本地文件被视为上载而不是真正上传的文件。 (当时没有$_FILES数组。)

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

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

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