这是一个很好的登录并验证用户对数据库的做法?

时间:2016-09-01 19:03:44

标签: c# sql security login

我想问一下,我正在做什么被认为是登录环境的一个好习惯,我正在创建一个SaaS,希望您对登录服务器进行身份验证,以便使用我正在创建的软件,但我想检查我所采用的方法是否正确,所以我会发布我在这里做的,以便看到你的想法!提前感谢大家的意见。

private void AcceptButton_Click(object sender, EventArgs e)
    {
        bool loginSuccesful = false;
        if (string.IsNullOrEmpty(usernameTextBox.Text))
        {
            MessageBox.Show("Por favor introduzca su Usuario.");
            usernameTextBox.Focus();
        }
        else
        {
            try
            {
                string connectionString = ConfigurationSettings.AppSettings["IntegraTDB"].ToString().Trim();
                SqlConnection con = new SqlConnection(connectionString);
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from dbo.Users where Username = @Username and Password = @Password", con);
                cmd.Parameters.AddWithValue("@Username", usernameTextBox.Text);
                cmd.Parameters.AddWithValue("@Password", passwordTextBox.Text);                    
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    loginSuccesful = true;
                }
                dr.Close();
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error de autenticación: " + ex.Message);
            }
            if (loginSuccesful == true)
            {
                role_Extraction();
                IIdentity identity;
                identity = new GenericIdentity(usernameTextBox.Text);
                IPrincipal principal = new GenericPrincipal(identity, _roles);
                Thread.CurrentPrincipal = principal;
                MessageBox.Show("Bienvenido a IntegraT!");
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Usuario y/o Contraseña incorrectos.");
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

以上看起来您可能正在将纯文本密码存储在数据库中。这应该始终避免IMO。至少应采用某种形式的散列。

更好的方法是利用身份验证解决方案,例如活动目录。