On Monday, April 22, 2002, at 03:47 PM, Andre Dubuc wrote:
> I tried what you suggested, and indeed globals are off. Perhaps my > problem > stems from my use of the $_GET[] with $vars. I guess I don't really > understand what I'm doing. If you would take a peek at this code [I > think > I've introduced a security hole, and I'm mixing up things]: I think the problem you're having is basically understanding what register_globals does, and why some people might want to turn it off. register_globals takes a variable (doesn't matter if it's a server variable, a cookie variable, a post variable, or a get variable) and registers it as global throughout the script. This means that if someone types http://www.domain.com/index.php?firstname=andre&lastname=dubuc into the "Address" bar of her browser, she has just requested the "index.php" resource from the server at "www.domain.com" using the HTTP protocol and sent two variables to the server using the GET method: $firstname = 'andre' $lastname = 'dubuc' If you have register_globals turned on, then your script can look like this: if ($firstname == 'andre' && $lastname == 'dubuc') { // do something } and it still works. However, if you have register_globals turned off, then the above 'if test' won't work. This is because these variables are not $firstname and $lastname, they are $_GET['firstname'] and $_GET['lastname']. To do an 'if test' with register_globals off, you should do: if ($_GET['firstname'] == 'andre' && $_GET['lastname'] == 'dubuc') { // do something } There's really not much of a difference. The thing is that instead of being a global variable, the data that you passed is now an element of the $_GET array. So you use the standard element notation, using the associative index of the variable name. If you do this: $firstname = $_GET['firstname']; $lastname = $_GET['lastname']; ...you make your code simpler to understand, but be careful that you don't do something in the same script like $lastname = $row['last_name']; (which could happen if you were trying to simplify your MySQL result data.) I'll take a look at what you've got.... > On page 1: > > <?php session_start(); ob_start(); ?> > // ob_start(); so I can have html headers on this page & redirect later > // some other code > <form action="page2.php" method="get"> > <?php > // The following line is where I think I've caused myself grief. > > <input type=text size=20 name=bozo> > > <input type=submit name=submit value="Agree"> > ?> Yeah, I'd say you've caused yourself some grief. This isn't even related to register_globals -- you've got two HTML input tags in the middle of your PHP block. You need to print() or echo these, not just type them in directly. print("<input type='text' size='20' name='bozo' />"); print("<input type='submit' name='submit' value='Agree'>"); > $bozo = $_GET['bozo']; > > /* Now is this correct? Am I exposing 'bozo' to a security hole? For > the > rest of the script, with each $_GET['var'] from the previous page I do > the > same. Somehow, I don't think I've grasped what to do with $vars. From my > reading elsewhere, should I, for example, in page 1 use something like > : > <input type=text size=20 name="<?php echo > $_SESSION['bozo'] ?>"> I prefer to do it the way that you have read elsewhere, but it really doesn't matter. Either way, you have a variable in your script that points to some user-specified data. What you've done is simplified the results, similar to what some people do when they pull data out of a result set with mysql_fetch_array(). The only security hole is if you have written your script to do something unsafe with the $bozo variable. HOWEVER... bear in mind that now that you are referring to this variable in this fashion, you could end up inadvertently overwriting this variable with a new variable, by doing something like $bozo = $row['bozo']; -- something that is far less likely to occur when referring to it as $_GET['bozo']. It really depends on how organized your code is. If I were you, I would probably get into the habit of calling it $_GET['bozo'], since that just saves you time and stress in the long run. The only security hole would be this: $_SESSION['admin'] = 'yes'; // indicates that user is an administrator $admin = $_SESSION['admin']; // simplify our variable name if ($admin == 'yes') { // if user is an administrator // display some sensitive data } // for some stupid reason we do this $admin = $_GET['admin']; // obviously you wouldn't do something like this if ($admin == 'yes') { // display some sensitive data } Essentially, in the above code, you've given the value of a GET variable called "admin" the same power as a session variable called "admin". This is bad practice in general, and I'm sure you wouldn't make this mistake. Simply making $admin = $_SESSION['admin'] does NOT mean that someone can type "admin=yes" into the querystring and automatically become the admin, because register_globals is OFF -- this means that $admin != $_GET['admin'] unless you set it so. > Once I figure out how I'm supposed to write the variables in the > scripts, > I'll be OK. But I'm so CONFUSED! */ > > if ($bozo == "") die ("Please enter your 'First Name'. <br><br> Click > 'Back" in your browser to enter this information."); This is fine. > /* This page is actually a confirmation page, I've tried to collect the > info > from page 1 ($bozo) and page 2 ($dodo) and print them to screen as in */ > > $bozo = $_GET['bozo']; > $dodo = $_GET['dodo']; > > print $bozo $dodo; > > /* I've also tried $_SESSION['bozo'], $_GET['bozo'], left out the > '$bozo = $_GET['bozo']' etc, etc, etc. -- I don't know what I'm doing > here!! Help! ! */ > ?> What seems to be the problem here? Erik ---- Erik Price Web Developer Temp Media Lab, H.H. Brown [EMAIL PROTECTED] -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php