Usando o register_globals no php 5.5

2773

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]);
                }
            }
        }
    }
}