gpt4 book ai didi

PHP 流/文件上传和 max_input_vars

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:13 24 4
gpt4 key购买 nike

当我执行从 Java 到 PHP 的流上传时,我有时会收到一个 PHP 错误,提示输入变量超出了 max_input_vars 的限制。

起初,我并没有意识到为什么。先解释一下:

正在使用类似于此的方法上传文件:

// get file data from input stream
$putdata = fopen("php://input", "r");
$tmp = tmpfile();
filesize = stream_copy_to_stream ($putdata, $tmp);
fclose ($putdata);

// copy temp stream into destination stream
$target = fopen('myfile.dwg', "w");
fseek($tmp, 0, SEEK_SET);
stream_copy_to_stream($tmp, $target);
fclose($target);
fclose ($tmp);

为了弄清楚为什么 PHP 会给我这样的警告,我转储了正在发送的数据:

file_put_contents ('input_vars.log', print_r ($_REQUEST, true));
file_put_contents ('php_input.log', file_get_contents ('php://input'));

这是有趣的部分:正在上传的文件为 1.8 兆字节。产生的日志是:

  • input_vars.log => 5 兆字节,90,000 行
  • php_input.log => 20 MB,283,000 行

现在错误消息突然看起来合法了。 php_input.log 只包含字节码,但 input_vars.log 的格式如下:

Array
(
[filename] => 0018-101-001_67.dwg
[versionId] => 11253
[filetype] => dwg
[‘á‹Úê-8øFj–sÙ/ghÔ÷JJÐWhvPV] => ...
....
)

前三个 key 通过 GET 发送,其余所有将成为文件数据。如果我搜索并计算 => 的匹配项,我会得到 25,954 个匹配项。然后我假设 REQUEST 拥有 26,000 个 key 。

现在,回到我的问题:我多次提高 max_input_vars 值,现在它的值为 30000。我是否应该忽略此安全设置,并将其设置得尽可能高?我担心的是,如果 REQUEST 数组大于 30000,PHP 会从中删除部分内容,从而导致文件损坏。

这个值设置得太高会不会有什么安全问题?是否有更好的方法将文件上传到 PHP?

最佳答案

也许尝试将 enable_post_data_reading 指令设置为“false”(或“Off”)以防止 PHP 解析文件主体?

顺便说一句,如果您使用的是 PHP 5.3.9,您应该修补 max_input_vars vulnerability .

关于PHP 流/文件上传和 max_input_vars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050331/

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