max_input_vars trigger detection
| From: | Côme Chilliet | Date: | Thu, 07 May 2020 08:55:00 +0000 |
| Subject: | max_input_vars trigger detection | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-110062@lists.php.net to get a copy of this message | ||
Hello,
We’ve hit the max_input_vars limit some time ago, and at first I tried to detect this case, but I
failed as there is no handy way to detect this situation.
In our case the application was complaining about CSRF token missing since the token was truncated,
and you had to go see the logs to actually see the max_input_vars error.
For those not familiar with this ini setting, it defines a maximum number of input vars in either
$_GET, $_POST or $_COOKIE. Additional variables are discarded. This is a good idea to avoid attacks
sending lots of data, but the program has no way of knowing it’s working with a truncated $_POST,
$_GET or $_COOKIE.
Source: https://www.php.net/manual/en/info.configuration.php#ini.max-input-vars
In the end we reworked the application to prevent it from creating a form with more than 1000 inputs
as it makes no sense and is not usable.
But still, it bugs me that there is no way to programmatically know that this limit was triggered.
With recent work into error handling a lot of what was warnings or fatal errors before is now easy
to catch and treat properly. It would make sense to me that this also becomes something the program
can react to.
So, would it be possible either to change the warning into some kind of catchable error (but I’m
not sure which operation would trigger it? Maybe first access to $_POST (in case it’s POST which
triggers the limit)?),
or to add a flag, or a function to test whether this limit was triggered.
Like was_max_input_vars_reached($_POST) ? (or was_max_input_vars_reached(POST) with an enum)
--
Côme Chilliet
FusionDirectory - https://www.fusiondirectory.org