note 124550 deleted from security.globals by cmb
| From: | cmb@php.net | Date: | Sat, 28 Dec 2019 07:01:13 +0000 |
| Subject: | note 124550 deleted from security.globals by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-213644@lists.php.net to get a copy of this message | ||
Note Submitter: Schnorxelkuh
----
I've picked up some ideas and put some own stuff to get a replacement for missing
register_globals and missing session functions.
Code now also works with multidimensional array and builds globals from a session.
To get the code to work use auto_prepend_file on php.ini to specify the file containing the code
below. E.g.:
auto_prepend_file = /srv/www/php/.auto_prepend.php.inc
You should have runkit extension from PECL installed and the following entries on your php.ini:
extension_dir = <your extension dir>
extension = runkit.so
runkit.internal_override = On
<?php
//Fix for removed session functions
if (!function_exists('session_register'))
{
function session_register()
{
$register_vars = func_get_args();
foreach ($register_vars as $var_name)
{
$_SESSION[$var_name] = $GLOBALS[$var_name];
if (!ini_get('register_globals'))
{ $GLOBALS[$var_name] = &$_SESSION[$var_name]; }
}
}
function session_is_registered($var_name)
{ return isset($_SESSION[$var_name]); }
function session_unregister($var_name)
{ unset($_SESSION[$var_name]); }
}
//Fix for removed function register_globals
if (!isset($PXM_REG_GLOB))
{
$PXM_REG_GLOB=1;
if (!ini_get('register_globals'))
{
if (isset($_REQUEST)) { extract($_REQUEST); }
if (isset($_SERVER)) { extract($_SERVER); }
//$_SESSION globals must be registred with call of session_start()
// Best option - Catch session_start call - Runkit extension from PECL must be present
if (extension_loaded("runkit"))
{
if (!function_exists('session_start_default'))
{ runkit_function_rename("session_start", "session_start_default"); }
if (!function_exists('session_start'))
{
function session_start($options=null)
{
$return=session_start_default($options);
if (isset($_SESSION))
{
$var_names=array_keys($_SESSION);
foreach($var_names as $var_name)
{ $GLOBALS[$var_name]=&$_SESSION[$var_name]; }
}
return $return;
}
}
}
// Second best option - Will always extract $_SESSION if session cookie is present.
elseif ($_COOKIE["PHPSESSID"])
{
session_start();
if (isset($_SESSION))
{
$var_names=array_keys($_SESSION);
foreach($var_names as $var_name)
{ $GLOBALS[$var_name]=&$_SESSION[$var_name]; }
}
}
}
}
?>