Your description of register_globals is good, except that the "security 
risk" is a matter of opinion. I would argue that register_globals only 
presents a security risk to inexperienced developers.

The client can submit any data to your application regardless of any 
configuration (and even regardless of language used). PHP's 
register_globals provides a convenient mechanism for receiving data from 
the client. In general, there are two types of data:

1. Data from the client
2. Data residing on the server

Code that allows data from the client to overwrite data residing on the 
server is poorly written code, and this is the scenario that creates 
this misconception of register_globals being a security risk. Data 
residing on the server can be information in a database, session data, 
etc. It is quite trivial to ensure that this data is overwritten. When a 
script begins execution, the client can no longer submit data. It is 
finished and can do no more so to speak. This makes things very easy. 
Thus, consider this:

$logged_in=0;

if (is_valid($password))
{
     $logged_in=1;
}

Guess what? The client cannot make $logged_in = 1 unless the password 
they provide passes the is_valid() function (a function you create to 
validate a password - just a hypothetical example). There is no way a 
client can submit any data in between these statements. The problem is 
when people fail to set $logged_in to 0 initially, so that a failed 
password simply avoids the if statement but doesn't explicitly set 
$logged_in to 0. This is poor programming.

For session data, try to override data that is initialized with 
session_register() and see if it works. What you will find is that 
whatever the client sends is overwritten by the data in the session, so 
this scenario is also easy to avoid.

My point is that most risks can be avoided by understanding how the Web 
operates and programming to the transactional nature of it. It is so 
easy to make sure that the client cannot overwrite server data. I think 
register_globals is far too often blamed for misunderstandings.

Chris

debbie_dyer wrote:

>If it is on - its a security risk because anyone can change the
>value of the data in your script by passing values in thru the URL.
>


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to