Mostrando postagens com marcador segurança. Mostrar todas as postagens
Mostrando postagens com marcador segurança. Mostrar todas as postagens

terça-feira, 23 de abril de 2013

Formulário de Login - Básico


Hoje postaram uma dúvida no forúm da MSDN sobre controle de Login. E eu achei interessante postar aqui uma forma simples de se criar uma tela de login.

Esse exemplo é em WindowsForms.

Primei eu adicionei os seguintes controles:
  • Label – Usuário e Senha
  • TextBox – Usuário e Senha
  • Button – Login


Os nomes dos controles ficaram:


  • TxtUsuario
  • TxtSenha
  • BtnLogin

O form ficou dessa maneira:



No evento Click do botão Login entrei com o seguinte código:
private void BtnLogin_Click(object sender, EventArgs e)
{
    if (txtUsuario.Text != string.Empty && txtSenha.Text != string.Empty)
    {

if (ExecutaLogin(txtUsuario.Text, txtSenha.Text))
{
    MessageBox.Show("Bem Vindo");
}
else
{
    MessageBox.Show("Usuário ou senha inválida");
}
    }
}

Acima eu estou verificando se o usuário preencheu os campos, se sim, eu executo a função: ExecutaLogin(string, string), veja o código:
private bool ExecutaLogin(string usuario, string senha)
{

    bool ok = false;

    SqlConnection cnnBase = new SqlConnection(ControleLogin.Properties.Settings.Default.Conexao);
    SqlCommand cmd = new SqlCommand("select nome from usuario where login=@usuario and senha=@senha", cnnBase);
    cmd.CommandType = CommandType.Text;

    cmd.Parameters.Add("@usuario", SqlDbType.VarChar).Value = usuario;
    cmd.Parameters.Add("@senha", SqlDbType.VarChar).Value = senha;

    SqlDataAdapter da = new SqlDataAdapter(cmd);

    DataTable dt = new DataTable();

    da.Fill(dt);

    da.Dispose();
    cmd.Dispose();
    cnnBase.Close();

    if (dt.Rows.Count == 1)
    {
return true;
    }
    else
    {
return false;
    }
    return ok;

}
O que esta sendo feito nessa função, nessa função eu utilizo 4 variáveis diferentes, são elas:
  • cnnBase -  é a conexão com o meu banco de dados, a connectionString  eu criei no App.Config. assim eu posso centralizar e acessar de qualquer ponto do sistema.
  • cmd – é o comando que será executado pelo SQL, no meu caso uma consulta.
  • da – é o retorno da minha consulta
  • dt – é o resultado transformado da minha consulta em uma tabela.

Repare que eu não estou concatenando os valores que o usuário passou  ao comando SQL que será executado. Isso porque o usuário pode inserir alguns códigos e quebrar o resultado do SQL, isso é chamado de SqlInjection. Por isso eu estou adicionado como parâmetro e informando qual é o tipo de dado que estou passando.

Eu coloquei um IF retornando como ok somente se o retorno for igual a um, pois se o resultado contiver mais de um registro ou não retornar nada, o retorno tem que ser falso.

Ao executar e digitar o usuário correto, o resultado será esse:


Digitando o usuário errado e a senha correta:



sexta-feira, 12 de abril de 2013

Criptografar senha

Aqui vai uma dica de como criptografar uma senha.

Eu particularmente utilizo um método um pouco peculiar mas que já vi várias pessoas utilizando.
No exemplo abaixo eu concateno  usuário e senha criando um Hash com essa informação. veja o exemplo:


using System.Security.Cryptography;


public static string AcertaSenha(string _login, string _senha)
{
    StringBuilder senha = new StringBuilder();

    MD5 md5 = MD5.Create();
    byte[] entrada = Encoding.ASCII.GetBytes(_login + "//" + _senha);
    byte[] hash = md5.ComputeHash(entrada);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
senha.Append(hash[i].ToString("X2"));
    }
    return senha.ToString();
}

Se eu passar o usuário "celso" e a senha "12345" o resultado será:
321F8F2C95B3AE3F5B9DAD4B58CF1819

em outra situação, se eu passar o usuário "CELSO" e a senha "12345" o resultado será:
5B105E94EB8276DB9738A92AFF8A490F


:)