Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

Bha, quem que não teve problemas de perder a senha . . . Ou fez um sistema para empresa preocupada com senhas. Desenvolvo sistemas para empresas que usam HTTPS até para páginas HTML puras sem acesso restrito. Exagero?

Então além de um sistema simples de Login acrescentei um extra. Estou criptografando o login e senha antes de ser enviado para o PHP. E no PHP envio para o MySql para comparar com as demais senhas existente no banco.

Veja no exemplo abaixo que após o click no botão, é feita uma chamada ao amfphp através de RemoteObject. O que envio para o PHP é o hash do MD5.

Arquivo post078.mxml
private function logon():void
{
    var remoteObj:RemoteObject = new RemoteObject("RemotingMessage");
    remoteObj.source = "078.login";
    remoteObj.showBusyCursor = true;

    remoteObj.addEventListener(ResultEvent.RESULT, fncOk);
    remoteObj.addEventListener(FaultEvent.FAULT, fncFalha);
    //MD5.hash

    var hash:String = MD5.hash(tiLogin.text + tiSenha.text);
    remoteObj.getOperation("logar").send(hash);
}
. . . .
<mx:Form x="0" y="0" >
    <mx:FormItem label="Login:">
        <mx:TextInput id="tiLogin"/>
    </mx:FormItem>
    <mx:FormItem label="Senha:">
        <mx:TextInput id="tiSenha"/>
    </mx:FormItem>
    <mx:FormItem>
        <mx:Button label="Logon" click="logon()"/>
    </mx:FormItem>
</mx:Form>

Veja que na clase PHP não estou descriptografando, e sim criptografando o que possuo no banco de dados. Mesmo assim, devolvo um hash para que seja muito complicado alguém burlar a tela do logim com um servidor de Proxy ou manipulação de dados HTTP.

Arquivoamfphp/services/078/login.php
class login
{
    function logar($login)
    {
        mysql_pconnect(DB_HOST, DB_USER, DB_PASS);
        mysql_select_db(DB_NAME);

        $query = "SELECT *  FROM `078_usuario` ".
                 "WHERE MD5(CONCAT(`USUARIO_LOGIN`, `USUARIO_SENHA`)) LIKE '" . $login . "'";
        $result = mysql_query($query);
        if(mysql_num_rows($result) == 1)
        {
            $row = mysql_fetch_array($result);
            return array($row['USUARIO_ID'], md5($row['USUARIO_ID'] . "string"));
        }
        return '';
    }
}

Abaixo segue um exemplo.

login = kraus
senha = demo

Espero que apreciem o código fonte.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

7 comentários

Deixe uma resposta

  1. Olá, vc tem alguma implementação utilizando java ao invés do php junto com o flex?

    Obrigado.

     
  2. @Carl é só adicionar um botão que limpe os dados do usuário logado e mudar para a primeira View do ViewStack.

     
  3. Bom Tutor

    Mas não seria interessante ter também um botão para fazer o logof.

    Abraço

    Carl

     
  4. Sim, neste exemplo a senha esta aberta.

    No caso de mais segurança você criptografa a senha com o login e guarda no banco.

    Flex
        var hash:String = MD5.hash(tiLogin.text + tiSenha.text);
    PHP
        "SELECT *  FROM `078_usuario` WHERE `USUARIO_SENHA` LIKE '" . $senha . "'";

    Com isso evita aqueles descriptografadores de MD5 - http://md5.rednoize.com/

     
  5. Muito bom seu artigo.

    Olha, uma boa solução porém vejo que você está guardando os dados sem encriptar. Se houver uma invasão no seu banco?

    Todos os dados serão facilmente lidos.

    Você poderia encriptar os dados no momento da inserção no banco e decriptar quando chegar ao cliente e deixar de usar MD5 que já foi quebrado.

     
  6. Bem bacana esta tua solução! Principalmente, pelo fato de concatenar o login e senha  e então criptografá-los, passando-os como um só dado.

    Uma curiosidade: num sistema simples, sem que seja necessário armazenar, por exemplo, o dado de quanto tempo a pessoa está logada, ou a quantidade de acessos concorrentes, como você faz para validar se uma sessão ainda está ativa? Utiliza as próprias sessions do PHP, ou conseguiu desenvolver alguma outra coisa que não fique requisitando o servidor para validar esta informação?

    Ah, parabéns pelo blog!

    Forte Abraço!
    Diego.