Os perigos da diretiva register_globals

A diretiva register_globals, presente no PHP, quando ativada, faz com que todos os índices presentes nos arrays superglobais $_POST, $_GET, $_COOKIE, $_SESSION $_SERVER, se tornem automaticamente variáveis dentro do seu script. Antigamente, isto era utilizado por diversos programadores, pois evita o trabalho de atribuição das variáveis.

A partir da versão 4.2.0 do PHP, esta diretiva vem desabilitada por padrão, pois as facilidades providas por ela, contribuem para que programadores iniciantes e desavisados cometam falhas de seguranças em seus códigos. A partir da versão 5.3, esta diretiva é considerada obsoleta e a partir da versão 5.4 ela não está mais presente.

Vamos a um exemplo de falha de segurança com register_globals:

Vamos supor que você tenha um sistema de login e verifica que, se as variáveis de sessão user e pass existirem, a variável de controle auth, assume o valor 1.

<?php
if (isset($_SESSION[‘user’]) && isset($_SESSION[‘pass’])){
$auth = 1;
}

if ($auth == 1){
echo ‘Logged user!’;
} else {
echo ‘You must have logged!’;
}

?>

O código funciona perfeitamente, porém se a diretiva register_globals estiver habilitada e o usuário que acessar esta página passar a variável auth por post, com o valor 1, o script falhará e mostrará que o usuário está autenticado, mesmo que ele não esteja.

Além disto, se esta diretiva estiver habilitada e você tiver variáveis no seu script com o mesmo nome de algum índice das superglobais, ocorrerão erros de sobreescrita de variáveis.

Por que não utilizar?

  1. Diretiva obsoleta, que será removida no PHP 6.
  2. Aumenta as chances de falhas de segurança cometidas pelo programador.
  3. Aumenta as chances de erros de programação, como sobreescrita de variáveis, alteração de valores.

Como desabilitar a diretiva register_globals?

Para desabilitar a register_globals você tem duas opções:

Arquivo de configuração do php (php.ini).

Arquivo .htaccess

Desabilitando pelo php.ini

Para desabilitar a register_globals pelo arquivo php.ini, localize o arquivo de configuração do php (php.ini) e edite a linha:

register_globals = On

para:

register_globals = Off

Desabilitando pelo arquivo .htacess

Se você não tem acesso ao arquivo de configurações do PHP, você pode desabilitar a diretiva pelo arquivo .htaccess. Para isto, crie um arquivo .htaccess na pasta raiz do seu servidor web e adicione a seguinte linha ao arquivo:

php_flag register_globals Off

Pronto, a diretiva register_globals estará desativada!

Até a próxima 😉

 

2 pensou em “Os perigos da diretiva register_globals

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.