-
A configuração register_globals
Posted on February 20th, 2009 No commentsAlgumas configurações de um Servidor de Hospedagem com PHP são importantíssimas no que diz respeito a segurança e integridade de todo o sistema. Trabalhar com cuidado estas configurações no PHP.INI podem preservar seu projeto e seus scripts PHP.
A principal configuração do sistema e a que causa maior problemas em relação a possíveis falhas de segurança gerada em scripts PHP é sem dúvida é o uso do register_globals. Aqui vamos nos estender mais do que apenas listar as diretivas, mas também propor soluções em sua programação para que você não tenha problemas com seus SCRIPTS PHP.
Sintaxe: register_globals = [ On I Off ]
A diretriz register_globals tem a função de registrar automaticamente variáveis que foram enviadas pelos métodos POST, GET e pelo uso de cookies.
Essa diretriz não representa um problema de segurança no PHP, porém pode proporcionar potenciais riscos à segurança do sistema por induzir o desenvolvedor ao erro. Não existe uma boa razão para habilitar essa diretriz e, de modo geral, register_globals deve permanecer sempre com o valor Off.
A partir da versão 4.2 do PHP, essa diretriz foi desabilitada no arquivo PHP.INI padrão e até então essa pequena alteração tem gerado muitas dores de cabeça para desenvolvedores PHP que mantêm scripts antigos, pois é muito comum encontrar códigos que foram escritos sem nenhuma preocupação com relação ao registro de variáveis. O problema ocorre quando é feita uma atualização do PHP de versões anteriores a 4.2 para alguma versão superior, e o website simplesmente pára de funcionar pelo faro das variáveis não existirem.
Muito provavelmente a partir do PHP versão 6 essa diretriz será completamente eliminada.
Para resolver esse problema é necessário analisar os logs gerados pelo PHP e registrar as variaveis segundo os exemplos que serão vistos adiante.
A seguir temos um exemplo de um código-fonte que poderia ser maliciosamente explorado se register_globals estiver habilitado:
<?php
}
}
?>
if (authenticated_user()) {
$authorized = true;
if ($authorized) {
include “/highly/sensitive/data.php”;
Obviamente o grande problema do script anterior está no fato de ser um código pouco inteligente, mas suponha que na URL o usuário faça uma chamada como a mostrada a seguir, teríamos então a validação do segundo if.
http://www.exemplo?authorized=true
Alterando poucas coisas no script é possível corrigir esse problema. Poderíamos, por exemplo, fazer o seguinte:
<?php
}
}
?>
Sauthorized = false, if (authenticated_user())
$authorized = true;
if (Sauthorized) {
include “/highly/sensitive/data.php”;
Tenha em mente que registrando a variável, a segurança do código certamente foi melhorada, mas qualquer deslize por parte do programador pode ser fatal.
Uma vez que register_globals = 0ff é obrigatório registrar as variáveis, uma a uma, e isso é muito bom, pois dessa forma será possível ter o controle de todas as variáveis envolvidas na execução do script.
Adicionalmente ao registro de uma variável, é de suma importância verificar o tipo dela e também aplicar um filtro, para que só então ela seja trabalhada no corpo do programa.
A partir do PHP versão 4.1.0 foram introduzidas as superglobals $_GET, $_POST,$_COOKIE e ~FILES, que têm a finalidade de importar dados provenientes dos métodos GET, POST, COOKIE e de upload de arquivos respectivamente. Esses arrays estão sempre carregados, e podemos obter valores deles sempre que for necessário.
Como já estamos convencidos de que manter essa diretriz ativa não é uma boa idéia, os demais exemplos levarão em consideração que register_globals = 0ff
Leave a reply


Comentários Recentes