gpt4 book ai didi

php - is_uploaded_file() 的目的是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:06:36 25 4
gpt4 key购买 nike

文档说:

Returns TRUE if the file named by filename was uploaded via HTTP POST

$_FILES['blah']['tmp_name'] 怎么可能不是 POST 上传的结果? PHP 创建了这个文件名。

This is useful to help ensure that a malicious user hasn't tried to trick the script into working on files upon which it should not be working--for instance, /etc/passwd.

我明白我应该仔细检查文件内容和大小。但是攻击者如何控制上传文件的临时文件名

或者 is_uploaded_file() 做一些其他检查吗?

感谢您提供一些信息。

最佳答案

在目前的形式中,is_uploaded_file 检查文件上传是否启用(否则它不可能是上传的文件)并且所提供的文件名实际上是由 PHP 生成的(我通过查看知道这一点在源头上)。

这不是很有帮助,因为如果上传过程中没有问题

is_uploaded_file($_FILES['blah']['tmp_name'])

将始终返回 true

但是,请考虑 $_FILES 自 PHP 4.1.0 以来“仅”可用,而 is_uploaded_file 首先出现在 PHP 4.0.3 中。此处似乎合乎逻辑的结论是,$_FILES 超全局可用之前很难安全地处理上传的文件。如果不出意外,非超全局变量可以被注入(inject),并且在启用 register_globals 的情况下非常容易——这曾经是 PHP 安全性的另一个痛点。

如果今天有人正在编写代码并像预期的那样使用 $_FILES,那么我会说 is_uploaded_file 在其当前实现中是“无用的”,因为没有可以诱骗您处理“坏”文件的攻击媒介。

但是,还有另一种看待事物的方式:is_uploaded_file 保证现在和将来都能正常工作,只要它可用,无论上传文件和制作的机制如何它们可供程序员使用。也许现在它没有提供任何具体的东西,但它是对带有保证的“安全文件上传”概念的抽象。我认为 $_FILES 没有这样的保证(同样,如果当前的现状“变得更糟”,我认为这是一种倒退)。

关于php - is_uploaded_file() 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com