PHP Comandos e Configurações Básicas - Programação PHP e Hospedagem de Sites em PHP com Scripts PHP
RSS icon Home icon
  • A configuração register_globals

    Posted on February 20th, 2009 Sites No comments

    Algumas 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

    VN:F [1.3.1_645]
    Rating: 4.5/10 (4 votes cast)
    • Share/Save/Bookmark

    Leave a reply