ASP .NET -  Acesso remoto ao MySQL e cifrando e decifrando senhas - II

 No artigo de hoje vamos continuar nosso projeto para criar uma aplicação ASP .NET Web Forms para acessar o MySQL, cifrar e decifrar destes, verificar palavras proibidas e obter o IP do visitante da página.

Na primeira parte definimos o banco de dados e a tabela no MySQL, instalamos o conector/NET para o MySQL e criamos as classes Conexao.cs, Cripto.cs e Censura.cs que darão suporte às funcionalidades que iremos agora implementar.

Implementando as funcionalidades no projeto ASP .NET

Vamos então implementar as funcionalidades em nosso projeto ASP .NET. Para isso vamos abrir a nossa solução no Visual Studio e a seguir abrir o arquivo Default.aspx.cs e começar definindo a variável arquivoPalavrasProibidas que irá armazenar o caminho e local do arquivo XML que contém a lista de palavras proibidas:

string arquivoPalavrasProibidas = @"c:\dados\ListaPalavrasProibidas.xml";

Após isso no evento Load da página vamos incluir o código abaixo:

  protected void Page_Load(object sender, EventArgs e)
  {
            if (!this.IsPostBack)
            {
                try
                {
                    getIpUsuario(); 
                    gdvUsuarios.DataSource = Conexao.ExecutaComando("SELECT * FROM Usuarios", Conexao.AbreConexao());
                    gdvUsuarios.DataBind();
                }
                catch (Exception ex)
                {
                    lblmsg.Text = ex.Message;
                }
            }
  }

Neste código verificamos se não ocorre um postback e chamamos a rotina getIpUsuario() cujo código temos a seguir:

private void getIpUsuario()
{
       lblinf.Text = "Seu Endereço IP = " + getEnderecoIP();
}

Este código exibe o IP do visitante no controle Label (ID=lblinf) obtido pela rotina getEnderecoIP() que tem o seguinte código:

 protected string getEnderecoIP()
 {
            string strEnderecoIP; 
            strEnderecoIP =    Request.ServerVariables ["HTTP_X_FORWARDED_FOR"]; 
            if (strEnderecoIP == null) 
                    strEnderecoIP = Request.ServerVariables["REMOTE_ADDR"]; 
            return strEnderecoIP.Trim();
}

No código  primeiro tentamos obter o endereço IP usando a variável HTTP_X_FORWARDED_FOR e se o valor for  nulo então usamos variável de ambiente REMOTE_ADDR.

  • REQUEST_ADDR – Informa o endereço IP do host remoto que fez a requisição.
  • HTTP_X_FORWARDED_FOR – Usado para retornar o IP se o visitante estiver atrás de um PROXY
  • Após exibir o IP do visitante acessamos o banco de dados MySQL e exibimos as informações da tabela Usuarios no controle GridView chamando o método estático ExecutaComando:

      gdvUsuarios.DataSource = Conexao.ExecutaComando("SELECT * FROM Usuarios", Conexao.AbreConexao());

    Este método executa a consulta SQL - SELECT * FROM Usuarios -selecionando todos os usuários cadastrados na tabela Usuarios.

    No evento Click do botão de comando Submeter vamos incluir o código a seguir:

     protected void Submeter(object sender, EventArgs e)
     {
                try
                {
                    if (string.IsNullOrEmpty(txtUsuario.Text) || txtUsuario.Text.Length < 5)
                    {
                        lblmsg.Text = "Informe o nome do usuário com no mínimo 5 caracteres";
                        return;
                    }
                    if (string.IsNullOrEmpty(txtSenha.Text) || txtSenha.Text.Length < 5)
                    {
                        lblmsg.Text = "Informe a senha com no mínimo 5 caracteres.";
                        return;
                    }
                    if (ValidaTexto(txtUsuario.Text) && ValidaTexto(txtSenha.Text)) 
                    {
                        Usuario _usuario = new Usuario();
                        _usuario.Nome = txtUsuario.Text.Trim();
                        _usuario.Senha = txtSenha.Text;
                        Conexao.ExecutaComando("INSERT INTO Usuarios(Usuario,Senha) VALUES(@Usuario, @Senha)", Conexao.AbreConexao(), _usuario);
                        Response.Redirect(Request.Url.AbsoluteUri);
                    }
                    else
                    {
                        lblmsg.Text = "Esse nome não é permitido, tente usar um nome diferente";
                    }
                }
                catch (Exception ex)
                {
                    lblmsg.Text = ex.Message;
                }
       }

    O código acima verifica se o nome do usuário e a senha foram informados e possuem no mínimo 5 caracteres para em seguidas chamar o método ValidaTexto() passando o nome do usuário e a senha e verificando se os valores informados não constam da lista de palavras proibidas.

    A seguir temos o código do método ValidaTexto() :

    public bool ValidaTexto(string texto)
    {
                if (Censura.IsPalavraProibida(texto, arquivoPalavrasProibidas))
                {
                    //a palavra é proibida
                    return false;
                }
                else
                {
                    //palavra permitida
                    return true;
                }
    }

    O código usa o método IsPalavraProibida() da classe Censura passando o texto a ser verificado e a variável que contém o nome e caminho do arquivo da lista de palavras.

    Para exibir a senha decifrada no controle GridView usamos o evento OnRowDataBound() com o seguinte código:

    protected void OnRowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
     {
             try
             {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                   e.Row.Cells[2].Text = Cripto.Decifra(e.Row.Cells[2].Text);
                }
            }
            catch
           { }
    }

    Aqui verificamos se a linha é do tipo DataRow() e usamos o método Decifra() da classe Cripto() para exibir a senha decifrada na terceira coluna do GridView.

    Executando o projeto e informando alguns valores teremos o seguinte resultado:

    Pegue o projeto completo aqui:  ASPNET_MySQL_CifraDecifra.zip

    Tito 3:8 Fiel é esta palavra, e quero que a proclames com firmeza para que os que creem em Deus procurem aplicar-se às boas obras. Essas coisas são boas e proveitosas aos homens.

    Tito 3:9 Mas evita questões tolas, genealogias, contendas e debates acerca da lei; porque são coisas inúteis e vãs.

    Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

     

                 Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
     

    Referências:


    José Carlos Macoratti