Do ponto de vista da segurança, não vale a pena discutir os benefícios e riscos da utilização register_globals no PHP. Era apenas uma questão de tempo a equipe de PHP seria remover completamente esse recurso controverso. E assim o fizeram , register_globals tinha sido preterido a partir do PHP 5.3 e removido a partir do PHP 5.4.
De qualquer forma, existem algumas situações em que você gostaria de atualizar para a versão mais recente do PHP (> 5,4), mas não se perder do recurso register_globals – por exemplo, quando você não tem permissão para alterar o código de um script que requer register_globals = on ou se é apenas muito trabalho (não remunerado) para encontrar e editar todas as partes de código relacionados.
Supondo que você seguir os princípios comuns de segurança, essa solução vai trazer de volta a funcionalidade register_globals para PHP 5.4+:
Adicione o código abaixo em seu arquivo php
include('register_globals.php');
register_globals();
Em seguida crie arquivo register_globals.php
<?php
/**
* function to emulate the register_globals setting in PHP
* for all of those diehard fans of possibly harmful PHP settings :-)
* @author Ruquay K Calloway
* @param string $order order in which to register the globals, e.g. 'egpcs' for default
* @link hxxp://www.php.net/manual/en/security.globals.php#82213
*/
function register_globals($order = 'egpcs')
{
// define a subroutine
if(!function_exists('register_global_array'))
{
function register_global_array(array $superglobal)
{
foreach($superglobal as $varname => $value)
{
global $$varname;
$$varname = $value;
}
}
}
$order = explode("\r\n", trim(chunk_split($order, 1)));
foreach($order as $k)
{
switch(strtolower($k))
{
case 'e': register_global_array($_ENV); break;
case 'g': register_global_array($_GET); break;
case 'p': register_global_array($_POST); break;
case 'c': register_global_array($_COOKIE); break;
case 's': register_global_array($_SERVER); break;
}
}
}
/**
* Undo register_globals
* @author Ruquay K Calloway
* @link hxxp://www.php.net/manual/en/security.globals.php#82213
*/
function unregister_globals() {
if (ini_get(register_globals)) {
$array = array('_REQUEST', '_SESSION', '_SERVER', '_ENV', '_FILES');
foreach ($array as $value) {
foreach ($GLOBALS[$value] as $key => $var) {
if ($var === $GLOBALS[$key]) {
unset($GLOBALS[$key]);
}
}
}
}
}
Comentários