sesser Sun Aug 14 17:58:55 2005 EDT
Modified files: /phpdoc/en/faq misc.xml Log: Replacing the register_globals=Off emulation code with an actual secure one. http://cvs.php.net/diff.php/phpdoc/en/faq/misc.xml?r1=1.24&r2=1.25&ty=u Index: phpdoc/en/faq/misc.xml diff -u phpdoc/en/faq/misc.xml:1.24 phpdoc/en/faq/misc.xml:1.25 --- phpdoc/en/faq/misc.xml:1.24 Fri Mar 25 09:07:00 2005 +++ phpdoc/en/faq/misc.xml Sun Aug 14 17:58:52 2005 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.24 $ --> +<!-- $Revision: 1.25 $ --> <chapter id="faq.misc"> <title>Miscellaneous Questions</title> <titleabbrev>Miscellaneous Questions</titleabbrev> @@ -146,24 +146,43 @@ ]]> </programlisting> <para> - This will emulate register_globals Off. + This will emulate register_globals Off. Keep in mind, that this code should be called in the very beginning of your script. </para> <programlisting role="php"> <![CDATA[ <?php // Emulate register_globals off -if (ini_get('register_globals')) { - $superglobals = array($_SERVER, $_ENV, - $_FILES, $_COOKIE, $_POST, $_GET); - if (isset($_SESSION)) { - array_unshift($superglobals, $_SESSION); +function unregister_GLOBALS() +{ + if (!ini_get('register_globals')) { + return; } - foreach ($superglobals as $superglobal) { - foreach ($superglobal as $global => $value) { - unset($GLOBALS[$global]); + + // Might want to change this perhaps to a nicer error + if (isset($_REQUEST['GLOBALS'])) { + die('GLOBALS overwrite attempt detected'); + } + + // Variables that shouldn't be unset + $noUnset = array('GLOBALS', '_GET', + '_POST', '_COOKIE', + '_REQUEST', '_SERVER', + '_ENV', '_FILES'); + + $input = array_merge($_GET, $_POST, + $_COOKIE, $_SERVER, + $_ENV, $_FILES, + isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()); + + foreach ($input as $k => $v) { + if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) { + unset($GLOBALS[$k]); } } } + +unregister_GLOBALS(); + ?> ]]> </programlisting>