At 05:08 27/07/2001, [EMAIL PROTECTED] wrote:
>Addressed to: Rasmus Lerdorf <[EMAIL PROTECTED]>
>               <[EMAIL PROTECTED]>
>
> > Or you can simply stop these people from using PHP which is another
> > effect turning off register_globals will have.
> >
> > Java does not have this problem because Java is so complex that this
> > same set of users can not program in Java. Fixing this problem by
> > making PHP more complex and eliminating these "problem" users is a bad
> > idea as far as I am concerned.
>
>
>YES!!

NO!! :)  Saying people would stop using PHP (or won't get started) because 
of this change is a gross exaggeration.  IMHO, the one and only issue at 
hand here is downwards compatibility, and not usability or ease of use, not 
even a bit.

>As I see it the whole issue revolves around the fact that some people
>get used to the fact that undefined variables have a value, and rely on
>it.  These are the people who get hit when a hacker slips in his own
>value in on such variables.  If the programmer had just initialized
>the variable at the top of the program, there would not be a problem.
>
>I think the best thing you could do about this issue is:
>
>
>1.  ALWAYS report the use of an uninitialized variable, no matter what
>level of error checking is in effect.  At the very least send a message
>to the error_log for every undefined variable. If the error level allows
>it also complain to the browser and send an email to ServerAdmin. That
>won't break any existing scripts, but depending on the text of the
>email, it could give system administrators incentive to correct problem
>scripts. [1]  The 'send email' default should be on in the distribution.

That's not going to find half, or a quarter, or whatever of the problems, 
since PHP has tools to cleanly handle undefined variables - namely isset() 
and empty().  They, or at least isset(), are quite popular.


>2.  Make it a FATAL error.  Too bad that would break so many scripts...
>Maybe it could be a major effect of the E_SECURE bit.  On the other
>hand, if you are serious about stamping out the uninitialized variable
>problem, this will do it.

I'd argue that that's actually going to make an equally messy effect on the 
PHP developer community, with a much lower gain, and also, a considerable loss.

There's *nothing* wrong with the following code:

function foo()
{
         for ($i=0; $i<10; $i++) {
                 $str .= $i;
         }
         return $str;
}

It's safe, it's quick, and it uses an uninitialized variable.  There are a 
hell of a lot more cases where using uninitialized variables is entirely 
secure, than cases where it's not.  As a 'purist' coming from C background, 
I'd always initialize variables.  PHP users would not.

BTW, I'm just being argumentative here.  I personally think that having 
E_NOTICE on is a very good idea, and that apps should be E_NOTICE-clean.  A 
great deal of PHP programmers will not agree with me, though, so I haven't 
made up my mind on whether I support changing this default or not.

Another main difference between having E_NOTICE turned on and having 
register_globals=off is that with register_globals being off, your app will 
not work, fair and square, unless you modify it to read its arguments from 
the right track vars arrays.  As for just setting E_NOTICE - it won't help 
unless people actually check all the possible control paths of their 
logic.  Of course, they should do it in the testing phase.  And yes, I'm 
willing to bet that a great deal of them does not.

>Register Globals is very convienent for people who write code with
>PHP.  Turning it off would be a great loss.  The problem is not that
>values passed to the server appear as variables, it is that some
>programmers don't make sure they initialize every variable before they
>use it.

There are two problems:
1.  Programmers are humans, and humans are creatures that tend to make 
mistakes, including stupid ones, and worse, repeat them over and over again
2.  PHP, with register_globals=on, mixes information coming from the user 
with information coming from code written by the developer, to a degree 
where it's impossible to differentiate between the two.  Given problem #1, 
this often leads to security problems.

In a perfect world, you'd be able to address #1 and then #2 would have been 
a non issue.  But we're walking the Earth, and not wonderland, so I think 
we should concentrate on solving #2 :)

Zeev


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to