ct

    Criando senha de segurança com o PHP e GD

    Dicas do Guia do Hardware

    Esta dica explica sobre uma coisa que é simples de fazer, é útil e o melhor de tudo: Ajuda a deixar nossos formulários html um pouco mais seguros. Estou falando da library GD. Bastante conhecida na web e amplamente utilizada para criação de thumbs, senhas de confirmação (em chats por exemplo), cadastro em determinados derviços, etc. Fatalmente você já passou por ela e hoje vamos conhecer o básico de seu funcionamento. Angelo Valle
    31/01/2005


    Olá pessoal, depois de um longo tempo volto a publicar algumas coisas por aqui. E para este "retorno" resolvi escrever sobre uma coisa que é simples de fazer, é útil e o melhor de tudo: Ajuda a deixar nossos formulários html um pouco mais seguros.

    Estou falando da library GD. Bastante conhecida na web e amplamente utilizada para criação de thumbs, senhas de confirmação (em chats por exemplo), cadastro em determinados derviços, etc. Fatalmente você já passou por ela e hoje vamos conhecer o básico de seu funcionamento.

    Criaremos a famosa senha de confirmação e de quebra aprenderemos um pouco. Tendo criatividade você pode usar o que aprender aqui para outras coisas de acordo com a sua necessidade.

    É necessário que o apache esteja instalado com suporte a PHP, e o PHP com suporte ao GD. No caso do Kurumin ou outros derivados do Debian basta dar um apt-get install php4-gd para instalar a library e todas as suas dependências.

    Não entrarei em detalhes sobre a instalação da GD, essa informação é facilmente encontrada no Google. Minha meta é apenas mostrar o funcionamento com o PHP.
    Link para a pesquisa no Google

    Vamos ao que interessa: Códigos!
    Nosso formulário terá apenas dois campos. Um para nome e o outro para a senha. Veja logo abaixo o código do mesmo:


    Arquivo dicagd.php

    session_start();
    $_SESSION["numeroaleatorio"]=rand(10000000,99999999);
    ?>

    Aprendendo com o GDH


    Nome:

    Confirmação:



    É isso mesmo, ele chama um .php como se fosse uma imagem. Criei uma session e defini um valor aleatório entre 10000000 e 99999999 para a variável numeroaleatorio. É com ela que vamos gerar a imagem e fazer a comparação lá na frente.

    Agora vamos fazer o dicagd2.php, que é para onde o nosso formulário está enviando os dados:


    Arquivo dicagd2.php

    session_start();

    $NOME=$_POST['nome'];
    $CONFIRMACAO1=$_POST['confirmacao'];
    $CONFIRMACAO2=$_SESSION['numeroaleatorio'];

    if ($CONFIRMACAO1==$CONFIRMACAO2) {
    echo $NOME . ", a senha digitada está correta!";
    }

    else {
    echo $NOME . ", a senha digitada está incorreta!";
    }

    ?>

    Bem, o que o dicagd2.php faz? Ele captura as variáveis enviadas pelo formulário no método POST, abre a session e captura aquele valor randômico que criamos no dicagd.php. Logo e, seguida ele compara o valor digitado com o valor gerado e responde dizendo se está correto, ou não.

    Agora vamos criar o arquivo imagemgd.php, que é o motivo desta dica :)


    Arquivo imagemgd.php

    session_start();
    $imagem = imagecreate(70, 15);
    $fundo = imagecolorallocate($imagem, 255, 255, 255);
    $fonte = imagecolorallocate($imagem, 0, 0, 0);
    imagestring($imagem, 4, 0, 0, $_SESSION['numeroaleatorio'], $fonte);
    header("Content-type: image/png");
    imagepng($imagem);
    ?>

    O que foi feito? Vamos lá:

    • A session foi chamada
    • O tamanho da imagem foi definido (em pixels)
    • A cor de fundo foi escolhida. No caso, branco
    • Cor da fonte: Preto
    • imagestring - Aqui a gente define o que vai ser escrito em nossa imagem
    • header - Fala pro seu navegador que esse .php é na verdade apenas uma imagem :)
    • imagepng - A nossa criação, no formato png.

    Claro que este é um exemplo bem básico, simples. Muitas coisas devem ser mudadas se for usado de forma profissional.

    O rand() por exemplo, poderia ser trocado por uma função que randomiza letras e números.

    A imagem pode ter uma outra imagem de fundo para dificultar programas de leitura.

    A session pode trabalhar em conjunto com um cookie, e até uma tabela mysql gravando o ip do usuário para evitar um flood

    Mas é apartir de coisas simples que nós criamos base para construir coisas complexas, essa é a intenção da dica.
    "Não dê o peixe. Ensine a pescar" ;-)

    E por falar em pesca, seguem alguns links interessantes e que não devem deixar de ser vistos por quem se interessou na dica:

     

    E para fechar, um pacote tar.gz com os arquivos que fui criando enquanto escrevia este texto: ontegd.tar.gz

     




    Blog:

    Add to Google

    » Gostou do texto? Veja nossos livros impressos:
    Hardware | Redes | Servidores | Kurumin 7

    ... ou encontre o que procura usando a busca:

cb
Livros de Carlos E. Morimoto Contato HOME