Ambiente restrito no Flex – Usando segurança na senha
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.mxmlprivate 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.phpclass 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.
Você pode seguir todas as respostas a esta entrada através do RSS 2.0 feed. Você pode deixar um comentário, ou colocar um link em seu site.


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.
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.
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/
Bom Tutor
Mas não seria interessante ter também um botão para fazer o logof.
Abraço
Carl
@Carl é só adicionar um botão que limpe os dados do usuário logado e mudar para a primeira View do ViewStack.