On Fri, 4 Oct 2002 20:50:32 +1000 Adam Royle <[EMAIL PROTECTED]> wrote:
> Hi All, > > I have been a subscriber of php-db for quite some time, and I have seen > MANY ppl ask why their variables aren't being passed though, etc, due > to register_globals, etc, blah blah blah > > I have kept my eyes open reading all the material I can, and I > understand the security implications of certain programming actions. > > Like most programmers, I am lazy. I prefer to construct functions to do > the hard work for me. Before the register_globals issue was widespread, > I loved programming in PHP (compared to ASP), because of the automatic > passing of variables from page to page (also, referencing undefined > variables without a hitch).I had some techniques to deal with security, > and other things, so register_globals = on wasn't such big deal for me. > But I acknowledge that if I do contract work for a business, and their > server is set to Not only that it is better security-wise, but also it helps you differentiate between SERVER, GET, POST, COOKIES and SESSION variables. Say, you need to always read a session variable called 'id', then, you install some app that passes 'id' in GET. Isn't it better own the entire control on the things? > I have set my php.ini to E_ALL and register_globals = off, etc, > although I don't want to have to do $var = $_GET['var'] for each > variable i want imported. I have also noted people are using > $HTTP_GET_VARS['var'] to allow for older php compatibility. But doing > it this way reminds me too much of ASP. Who cares of ASP? I don't. > Now, my question is, has anyone created functions or developed > techniques to prevent obvious security breaches and also not collapse > when using E_ALL? I have read somewhere that some people wrote a > function which would accept an array of variable names (and > get,post,session flag etc), and globalize all of those variables listed. > > Such an example (i imagine) would be something like this: > > import_vars( "GET", array('id','var2','name') ); I made one. Here: // Alter variables for the versions prior to 4.1.0 // NOTE: $_REQUEST global variable is NOT supported. if(strnatcasecmp('4.1.0', PHP_VERSION)>=0) { foreach(Array( '_GET' => 'HTTP_GET_VARS' ,'_POST' => 'HTTP_POST_VARS' ,'_COOKIE' => 'HTTP_COOKIE_VARS' ,'_SESSION' => 'HTTP_SESSION_VARS' ,'_SERVER' => 'HTTP_SERVER_VARS' ,'_ENV' => 'HTTP_ENV_VARS' ,'_FILES' => 'HTTP_POST_FILES' ) as $transvar['new']=>$transvar['old']) { if(isset($$transvar['old']) and is_array($$transvar['old'])) { $GLOBALS[$transvar['new']] = &$$transvar['old']; } } // Unset transvar, we do not need it anymore. unset($transvar); } > Now I don't think that I would have any troubles writing this sort of a > function, although I was wondering if anyone had already considered > this approach, or decided on a better solution. Really, I don't want to > have to do isset(), etc on all my vars when using them. What I could > deal with is having one line, where I list all the variables i use on > the page, and it either imports it or creates an empty string if not > found (therefore initializing it). > > What do you all think of this approach? Well, if you really care then maybe the approach should be: if PHP version is less than v4.1.0 then start up a file with the code that gets the HTTP_*_VARS and changes them into $_GET, $_POST etc... this makes you being more compatible > > PS. Sorry if this is talked about WAY too much on these lists, but I > think this is a more informative thread for people who know about > register_globals etc, but want scripting to be easier (and faster) with > PHP, but still maintaining a good code structure (and sensible > programming logic). One thing to add: ever asked yourself why people, after retrieving some data from DB call their variables similar like: $recID and not just $id or $dbTime and not just $time? Obviously to differentiate between the origins of data. Now, if you understood what I meant here, why using $id within the script instead of $_GET['id'] or $_SESSION['id'] ? Isn't is a cleaner, rather elegant code? That is a good practice. You shouldn't be lazy writing 6 more characters for a variable... You'd do that anyway for the data names because would be confused :) Maxim Maletsky [EMAIL PROTECTED] www.PHPBeginner.com // where PHP Begins -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php