Em tudo na vida o quesito segurança se enquadra. Ela é, muitas vezes, uma sensação, mas se torna evidente quando fazemos uso dela e a mesma responde à altura do evento que a testou. Em TI, segurança é um item a considerar quando desenvolvemos aplicações web que trafegam dados pela rede, e senhas é sempre o cerne deste tema, sendo muitas vezes o calcanhar de Aquiles de uma aplicação a medida que no cenário web a senha não esta protegida, devidamente criptografada nas duas pontas: Origem e destino dos dados .

Para proteger as senhas que acessam uma aplicação, é certo observar o uso de formas de criptografia das credenciais de acesso, isto é, as senhas, por meio de um algoritmo de hash. Um dos mais utilizados é o MD5.

O MD5 é um algoritmo de hash unidirecional, ou seja ele não tem volta. Ao utilizá-lo, o produto deste algoritmo, em teoria, não pode ser revertido ao conteúdo que o originou. É claro que mesmo o hash sendo utilizado nas senhas, senhas óbvias não devem ser usadas, pois o hash md5 será conhecido como 123456, dentre outras. Isso pode ser controlado com uma função que valide a senha digitada, baseado nas regras de negócio estipuladas para o projeto em desenvolvimento.

O Flex 3 não possui nativamente a biblioteca (as3corelib.swc) que possui essa função. Para tanto devemos baixá-la em http://as3corelib.googlecode.com/files/as3corelib-.92.1.zip.

Ao baixar a biblioteca e descompactá-la, basta navegar até a pasta as3corelib-.92.1 e, dentro dela (no diretório lib/) copie o arquivo: as3corelib.swc e cole dentro do seu projeto na pasta lib.

Após colar na pasta lib de seu projeto, clique com o botão direito na pasta do projeto e selecione propriedades. A janela Properties irá surgir e no canto esquerdo clicamos em Flex Build Path. Em seguida, vamos na aba Library Path, clicamos em libs e clicamos no botão Add swc. A janela Add SWC é exibida.

Basta selecionar onde o arquivo as3corelib.swc se encontra e clique no botão OK > OK na janela Properties. Com esses procedimentos, o Flex irá realizar um build no seu projeto e poderemos utilizar o MD5.

Para este artigo foi criado uma tela principal com um campo do tipo text input para receber uma senha digitada pelo usuário. Esta senha receberá um hash do tipo md5 que a converterá em uma string alfanumérica de 32 caracteres (sempre 32 caracteres alfanuméricos). Em seguida clique no botão login. Concomitantemente, um componente HTTP Service é acionado e faz uma consulta no banco de dados que traz o campo senha e confronta com o hash convertido do lado da aplicação para autorizar o usuário. Veja a Figura 1.

O foco é demonstrar apenas o hash da senha e o retorno do banco, desprezando outros dados como nome de usuário, email ou qualquer informação pertinente ao processo de login.

Figura 1. Janela Add SWC.

Neste exemplo criaremos um banco de dados com uma tabela usuarios e apenas dois campos idusuario(integer) autoincremento e chave primária e senha(varchar 45). Foi realizado um insert na tabela , convertendo a senha ‘142536’ em hash MD5 ‘a45958517604f5cd90d6ee51ad9cfdb6’ utilizando a função md5 no PHP. Após o envio da query (para insert into usuarios (senha) values(''a45958517604f5cd90d6ee51ad9cfdb6''). A tabela usuarios já possui um registro.

Agora vamos construir um arquivo PHP que recebe via post a senha e compara com a senha gravada em md5 no banco e retorna se esta ok a credencial ou não.

O arquivo cripto.php recebe via post a senha digitada pelo usuário e realiza uma consulta no banco de dados. Caso positivo na comparação dos valores digitados é retornado um XML é enviado a aplicação flex.

A aplicação possui uma classe Usuarios com idusuario e senha como propriedades e o método doLoadFromXML que recebe o arquivo que o PHP gera em caso de sucesso na comparação das senhas para alimentar a aplicação.

Ainda do lado Flex, existe a necessidade da criação de um componente que irá se comunicar com o servidor, em específico com o arquivo cripto.php. Esse componente é do tipo HTTP Service, o wsUsuario que vai enviar via post a senha e receberá o XML de retorno em caso de positivo. Observe a Figura 2.

Figura 2. Componente wsUsuario sendo arrastado para a aplicação.

Após o componente ter sido construído, seu uso é realizado arrastando o componente da aba Componentes/Custom para a aplicação, em modo Design. O componente recebe o nome de webUsuario. Sua finalidade é se comunicar com scripts PHP da aplicação.

Na aplicação, o método Click irá ser disparado pelo evento click do botão btnCLick, cuja propriedade Label está com o texto Enviar. A assinatura do método possui uma variável senha do tipo String que recebe a senha digitada pelo usuário e a converte em md5:

(var senha:String = MD5.hash(edtSenha.text);)

Para que a função md5 esteja utilizável, é necessário realizar um import da classe corretamente:

import com.adobe.crypto.MD5; .

No passo seguinte, o componente webUsuario realiza uma chamada à seu método doLogin que recebe como parâmetro a variável senha com a mesma já criptografada pela classe crypto.

Dentro do componente webUsuario a função OnResultUserRead é responsável por receber o XML, que é montado pelo script PHP e adicionando-o para ser utilizado dentro da aplicação, podendo ser usado em qualquer componente do Flex que recebe dados de um data provider.

Em relação a comunicação com o servidor, além da questão com a segurança da senha, outro fator importante a salientar é que mesmo pensando que os dados(não só a senha)e a descrição destes dados (metadados) permanecem legíveis aos humanos, como XML, isso pode ser prático, mas também é um ponto negativo, pois o texto legível a humanos não é tão eficiente do ponto de vista de performance, velocidade, quanto uma comunicação binária entre o cliente e o servidor.

No Flash MX, o Flash Remoting foi introduzido como uma forma para prover comunicação binária (que é extremamente eficiente em comunicação entre cliente - servidor), por ser baseado em protocolo aberto, cujo nome é AMF(Action Message Format), possibilitando a comunicação com diversas tecnologias de servidor como Java, PHP e ColdFusion.

Neste exemplo, o XML é carregado em runtime usando a classe HTTPService, quando o componente webUsuario dá acesso a URL e retorna os dados formatados como XML.

O acesso a URL (arquivos PHP) está sendo garantido pela função GetBasePath,situado na classe Util, que permite acesso a pasta htdocs do servidor Apache, cujo IP é 127.0.0.1 e sucedido de uma barra ‘/’ para que, a partir daí, o componente HTTPService possa encontrar o script PHP que provê a aplicação. Nesta classe foram criadas algumas funções básicas para a aplicação, como exibição de mensagens, janelas Pop-up, fechamento de janelas modais, etc.

Ainda no componente webUsuario, em sua propriedade OnExecute, ocorre a validação dos dados enviados e retornados através da função ValidaSenha(). A propriedade OnExecute é utilizada para identificar o evento que sinaliza que o componente já executou alguma função e, neste caso, está disparando a função ValidaSenha() neste evento. Ou seja, a mecânica funciona da seguinte forma: a aplicação criptografa a senha em MD5 com a classe crypto e o componente webUsuario acessa o método doLogin, fornecendo o parâmetro necessário para a URL e o arquivo PHP recepciona esses dados enviados via post . O banco de dados é acessado e os dados enviados pela aplicação são comparados com os dados salvos no banco e o retorno é realizado em XML para a aplicação.

No corpo da função a variável loUsuario do tipo UsuarioData recebe o primeiro elemento do retorno do componente HTTP Service WebUsuario. Neste momento realiza-se a comparação entre o retorno e o que o usuário digitou e emite-se a mensagem "Informe a senha corretamente" ou "A Senha está correta". A mensagem é exibida através da função ShowMessage, pertencente a classe Util .

Utilizando o navegador Firefox, em conjunto com o complemento Firebug, é possível observar o que está sendo enviado pelo Flex e o retorno do XML, conforme as Figuras 3 a 5.

A aba Response exibe os dados no formato XML retornado para a aplicação, conforme a Figura 6.

Na Figura 7 vemos o resultado do projeto modelado.

Figura 3. Ao pressionar F12, o firebug exibe na aba net a aplicação, enviando o post do campo senha ao arquivo cripto.php

Figura 4. cripto.php ,expandindo as informações.

Figura 5. Parâmetro senha com hash enviado via post.

Figura 6. XML retornado para aplicação.

Figura 7. Diagrama exibindo o esquema deste exemplo.

Críticas e sugestões ou dúvidas por favor não hesite em escrever.