A diretiva register_globals há muito tempo é condenada pelos desenvolvedores mais experientes por possibilitar uma falha de segurança. Com essa configuração ativada, todas as variáveis contidas em $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER são automaticamente convertidas em variáveis do PHP.
Por exemplo ao acessar http://localhost/arquivo.php?variavel=teste, se o servidor estiver configurado com register_globals = On, no script arquivo.php, haverá uma variável chamada $variavel, que terá o valor 'teste'. Isso pode ser uma falha de segurança pois um atacante pode infiltrar códigos maliciosos em variáveis que não deveriam vir das fontes carregadas pelo register_globals.
Para piorar, no PHP 6 essa configuração não irá mais existir. Ou seja, se você utiliza register_globals em seu código, certamente terá que fazer alterações ao atualizar a versão.
Sabemos que no PHP algumas diretivas definidas no php.ini podem ser alteradas em tempo de execução através da função ini_set().
Porém a diretiva register_globals não pode ser desabilitada em tempo de execução.
Portanto há 2 maneiras de desabilitar essa configuração
1 - Alterar o php.ini, alterando a diretiva register_globals para Off
2 - Criando um arquivo .htaccess no servidor alterando essa configuração para Off
Porém, como nem tudo são flores, há situações na qual não temos acesso a essas configurações do servidor. Para essas situações há uma maneira simples de garantir que as variáveis passadas por $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER não serão transformadas em variáveis PHP.
No início do programa adicione as seguintes linhas:
foreach ($_ENV as $key => $value)
unset($$key);
foreach ($_GET as $key => $value)
unset($$key);
foreach ($_POST as $key => $value)
unset($$key);
foreach ($_COOKIE as $key => $value)
unset($$key);
foreach ($_SERVER as $key => $value)
unset($$key);
Fazendo isso você, antes de iniciar o desenvolvimento, está limpando as variáveis carregadas automaticamente.
Desta forma o desenvolvedor fica impossibilitado de utilizar as "vantagens" de register_globals e garante que o código será compatível com a nova versão do PHP.
Obs.: As variáveis ainda poderão ser acessadas normalmente pelos arrays superglobais do PHP $_ENV, $_GET, $_POST, $_COOKIE e $_SERVER
Obs.: Lembrando que essa técnica nada mais é que um Recurso Técnico Improvisado(Workaround, Gambiarra, Quebra-Galho...), mas que funciona!
Nenhum comentário:
Postar um comentário