Pergunta

Eu herdaram um legado de código PHP que foi escrito quando este ainda era uma prática padrão para usar register_globals (A partir do PHP 4.2.0, a presente directiva desativado por padrão, lançado 22.Abril de 2002).

Sabemos agora que é mau para a segurança de tê-la ativada.O problema é como faço para encontrar todos os locais no código onde eu preciso para usar $_GET ou $_POST?Meu único pensamento foi para definir o relatório de erros para avisar sobre variáveis não inicializadas e, em seguida, testar cada parte do site.Existe uma maneira mais fácil?Será que vou ter que testar cada caminho de código no site ou vai PHP dar um aviso em um arquivo de base?

Foi útil?

Solução

Se você definir o relatório de erros para E_ALL, ele avisa no log de erro sobre variáveis indefinidas completa com o nome de arquivo e número de linha (supondo que você está fazendo para um arquivo).No entanto, ele vai avisar só se quando ele vem através de uma variável indefinida, então eu acho que você vai ter que testar cada caminho de código.Executando o php na linha de comando não parecem ajudar também.

Há uma ferramenta de depuração chamada xdebug, ainda não tentei, mas talvez isso pode ser útil?

Outras dicas

Eu escrevi uma script usando o built-in De lexemas funções.O seu muito áspero, mas ele trabalhou para a base de código que eu estava trabalhando.Eu acredito que você também poderia usar CodeSniffer.

Você pode manualmente 'falsa' o register globals efeito, mas adicionar um pouco de segurança.(Eu, em parte, peguei isso do osCommerce garfo chamado javascript)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

Embora você gostaria de ajustá-lo para tornar o código mais seguro, pelo menos por adicionar a sua configuração global variáveis (como o caminho e o url de base) para o mau globals lista.

Você também pode usá-lo facilmente compilar uma lista de todos usados get/post variáveis para ajudar você, eventualmente, substituir todas as ocorrências de, digamos, $return_url, com us $_REQUEST['return_url];

Eu sei que há uma maneira de configurar o php.ini valores para que o script com um determinado comando, eu assim, fui procurar e encontrei este muito - Goto último post na página

Eu também encontrei o seguinte post, que pode ser de uso - Ir para a última postagem da página

Vou acrescentar a isto mais se ninguém tenha encontrado uma resposta, mas eu agora deve pegar um trem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top