Hey Kamil,

On 23.7.2025 21:01:14, Kamil Tekiela wrote:

This would prevent most of the
    vulnerabilities found in the dataset and we cannot think of a
    valid use

    case for allowing this behavior


But not all. This function is dangerous on its own. Attack vectors are 99% through superglobals but could come from other sources too. However, this function is handy when used correctly.

I agree with everything stated in the email. Using extract() on superglobals is definitely an incorrect usage and should be forbidden. If it's something that we can do then we should do it as soon as possible even if it means breaking some poorly written code.

Empty prefix should be a bug and as such I recommend adding an error for this in PHP 8.5 without deprecation or RFC.

One more thing that would improve security is to change the default flag to EXTR_SKIP. It would be a major BC though so we could probably only do it in PHP 9.

I can agree on making EXTR_SKIP the default.

I do not agree that empty prefix is a bug though. That's a common operation for templating for example.


Regarding extract on superglobals, I have some legacy code from PHP 3 times, which still lives on with the following lines of code:

// Emulate register_globals on extract($_POST,EXTR_SKIP);
extract($_GET,EXTR_SKIP);


Yeah, not the most awesome. But it works. Obviously, you can work around that with foreach ($_GET as $key => $val) $$key = $val;. So, I'm not strictly against warning here, but it doesn't necessarily mean the code is incorrect. Just not necessarily to todays standards.


Bob

Reply via email to