Jani Taskinen wrote: > On Thu, 2008-02-07 at 01:43 -0800, Rasmus Lerdorf wrote: >> Jani Taskinen wrote: >>> On Wed, 2008-02-06 at 20:27 -0800, Rasmus Lerdorf wrote: >>>> Stanislav Malyshev wrote: >>>>> The proposal(s): >>>>> 1. One way to fix it is to create a new .ini request_order that would >>>>> control just _REQUEST. >>>>> >>>>> 2. Other solution would be to keep variables_order but drop 'C' parsing >>>>> from _REQUEST - i.e. make _REQUEST never include cookies. I don't know >>>>> how many people really need cookies together with get/post in REQUEST. >>>>> >>>>> 3. Yet another solution would be to make superglobals independent of >>>>> variables_order - i.e. _COOKIE would always exist even if >>>>> variables_order doesn't have the letter. I actually don't see any reason >>>>> having JIT to remove any of the superglobals - if you don't use them, >>>>> with JIT you don't pay for them. And with COOKIES it's not that it would >>>>> be a big cost anyway - how many cookies could you have? >>>>> Of course, it'd be more substantial change which could break some apps >>>>> relying on some quirks of current behavior. >>>>> >>>>> So, what do you think on this? >>>> They are all about equivalent. Even #3 would need some sort of ini >>>> override since otherwise it removes some flexibility we have today. >>>> There are setups that specifically rely on disabling $_COOKIE to force >>>> code to go through other mechanisms to get at the cookies. > > I missed this from your mail. Sounds a very weird idea, do they set > $_COOKIE themselves then? And can I ask where such setup is used?
Very large sites with signed and encrypted cookies containing lots of sub-parts will typically want to only decrypt and validate these cookies once. Likely before they even get to PHP and provide an API to get at them instead of having all the bits downstream each try to parse the raw $_COOKIE value. Being able to turn off $_COOKIE altogether helps make sure everyone follows that approach. >>> I pick door #3. >> Well, plenty of people know about this feature and make use of it. >> Especially since it has been documented to work this way for a long time. >> See: http://php.net/manual/en/ini.core.php#ini.variables-order > > But was it really designed to work like that? :) It was actually. Initially it was designed that way for performance reasons. Populating $_ENV on every single request if you weren't going to use it made no sense. This was obviously pre-JIT. In a pre-JIT world being able to disable these made a lot of sense. Now the performance reason is mostly gone, but it still leaves us with applications that don't expect them to be there. Worst-case we have configurations that explicitly have turned them off and create their own $_COOKIE array to implement a local security policy. Having the superglobal show up and populate what they thought was a locally created array could cause security problems. > Anyway, I guess there's no other way out of this than creating another > ini option, say "request_variables_order" which controls whatever goes > in $_REQUEST. But would the "variables_order" still control the overal > situation? For example when it is set to "GP" and > "request_variables_order" is set to "GPC", would $_REQUEST have all of > $_GET / $_POST / $_COOKIE regardless what "variables_order" has in it? The less we change, the better. That includes the meanings of existing directives. We should focus on the actual problem and make the fewest changes possible to solve that. The actual problem being that by default cookie data is in $_REQUEST and that can lead to problems. So, we change that default. Now, in the few cases out there where someone really does want cookie data in $_REQUEST we can provide an ini for them to enable that. Since today we don't have the ability to have cookie data in $_REQUEST without also having $_COOKIE present, we won't break anything by not supporting that edge case. So I think we can tie the two together and perhaps throw a startup error if someone tries to make $_REQUEST contain cookie data if variables_order does not include "C" -Rasmus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php