1

我有一个流量相对较高的网站,大约每天一次生成错误消息:

PHP 警告:未知:输入变量超过 1000。增加限制更改 php.ini 中的 max_input_vars。在第 0 行的未知中

我的猜测是,它是由一些爬虫找到了一个永无止境的 URL 链接结构引起的。但是,我在访问日志中找不到任何有问题的东西(例如,带有 1000 多个获取参数的 url)。

是否有一种简单的方法可以深入了解此警告?它发生在加载任何 php 脚本之前,所以我认为不可能用 php 进行内省。如果我有 URL 等简单的细节,就很容易解决。

4

2 回答 2

1

如果它只是偶尔发生并且可能还会影响最终用户,那么提高限制实际上是相当安全的——这是出于实际原因而施加的限制,以规避可能的攻击。

实际上,为了调试这个我会深入研究边缘情况。在现实世界的场景中,我确实希望这个错误只会在某些东西无限嵌套时发生。我会在始终包含的代码中的某处插入一个小的检测脚本,例如:

function detectLargeInputs($name, $array)
{
  if(count($array) > 500)
    mail('mymail@domain.tld', 'Large input in '.$name, 
         print_r($array, true).print_r($_SERVER, true));
}
detectLargeInputs('GET', $_GET);
detectLargeInputs('POST', $_POST);
detectLargeInputs('COOKIE', $_COOKIE);

这应该会在一天内显示问题,包括$_SERVER也有类似字段的信息,REQUEST_URI这些信息HTTP_REFERER应该可以帮助您准确地查明问题。

于 2013-10-08T23:52:13.743 回答
0

注意力!如果输入变量在子数组中,则此检测不会发出警报: Array ( [foo] => 100 [bars] => Array ( [0] => 1111 [1] => 1111 ...(超过 1000 ) ) )

'count' 的返回值将是 2,一切看起来都很好,但 PHP 不会处理子数组中超过 1000 个值。

于 2020-05-29T07:15:17.363 回答