+ Responder ao Tópico



  1. #1
    Hoodwinked
    Visitante

    Wink Evitando falhas de seguranca no codigo PHP.

    Ola pessoal,

    Uma coisa muito legal que ajuda no desenvolvimento rapido de sistemas e deixar pro engine do PHP resolver o tipo de variavel que ira criar. Isso tambem deixa os programadores preguisos e possibilita falhas de seguranca que podem ser exploradas e encontradas com uma infinidade de fuzzers espalhados na internet.

    Vamos a um codigo super simples:

    if ($is_admin == 1) {
    //Sim, Eu sou o admin que controla o Administration Pannel
    [...]
    } else {
    //Nao, nao sou o admin.
    [...]


    Isso possibilita a seguinte falha:

    //remote_host/bugged.php?is_admin=1

    Como arrumar isso?

    Declarando na mao (principalmente as variaveis que tratam de login e autenticacao)

    O codigo correto seria:

    $is_admin = 0;
    [...]
    if ($is_admin == 1) {
    //Sim, Eu sou o admin que controla o Administration Pannel
    [...]
    } else {
    //Nao, nao sou o admin.
    [...]
    }


    Naum preciso dizer que vale tb pras outras linguagens.

    [s]

  2. #2

    Padrão

    Isso não acontece se voce desativar o register_globals do PHP, e esse bug não funciona assim em outras linguagens.

    O que voce ta fazendo é permitir que php crie as variaveis pra voce, quando na verdade voce deveria fazer:

    $is_admin = $_SESSION['is_admin'];

    Isso já impede que o usuario tente alguma coisa


    De qualquer forma, NUNCA use register_globals, isso é prejudicial a saude.

    Como voce mesmo disse, o php PERMITE voce fazer isso, mas já faz um bom tempo que ele nao recomenda (nenhum servidor de produção faz isso, logo, voce corre o risco de desenvolver uma aplicacao que nao funciona).

    Como eu ja disse isso nao funciona dessa forma em outras linguagens (talvez o asp classico funcione, mas isso nem eh linguagem de programacao xD)

    Certamente sao dicas validas essas

  3. #3

    Padrão

    outra dica eh proibir (disable_functions) as funcoes de execução de programas no servidor...like: exec, shell_exec, etc eetc...