基本登录页面只是为了检索用户的信息

时间:2012-08-17 04:23:52

标签: c# asp.net

我正在使用ASP.NET成员身份,因为这不是具有此类身份验证的典型网站。我有管理员指定Uname和密码(加密)的表。

单击“登录”按钮后,我有一个LogIn页面,我需要在数据库表中搜索用户。

public void getuserinfo()
{
    String var = System.Configuration.ConfigurationManager
        .ConnectionStrings["KKSTechConnectionString"].ConnectionString;

    SqlConnection conn = new SqlConnection(var);
    SqlCommand myCmd = new SqlCommand("SELECT Username, Pass FROM Users", conn);
    conn.Open();

    if(TextBox1== Username) && (TextBox2== Password) <- I am not able to get this right :( 
    {
        //How do I get his info?? 
    }
} 

*Database table for dbo.users:*

Uname(PK) | Pass | EmpID (FK)

我想首先解密密码,然后将其与TextBoxPassword进行比较..

请帮忙。

2 个答案:

答案 0 :(得分:2)

另一种方法是对用户界面输入的密码进行哈希处理,并将其与存储在数据库中的哈希密码进行比较。

现在,使用你的功能。

public void ValidateUser()
{
    var connectionString = System.Configuration.ConfigurationManager
        .ConnectionStrings["KKSTechConnectionString"].ConnectionString;
    var userName = txtUserName.Text;
    var hashedPassword = Helper.ComputeHash(txtPassword.Text, "SHA512", null);
    // this query should be parameterised when used in production to avoid SQL injection attacks
    var query = String.Format("SELECT Username, Pass FROM Users WHERE Username='{0}' AND Pass='{1}'",
                    userName,
                    hashedPassword);

    using(var connection = new SqlConnection( connectionString ))
    using(var command = new SqlCommand(query, connection ))
    {
        conn.Open();
        SqlDataReader reader=command.ExecuteReader();
        if(reader.Read())
        {

        }
        reader.Close();
    }
}

答案 1 :(得分:0)

在我们解决问题之前几乎没有问题:

  1. 您如何从客户端向服务器端发送用户名和密码?它是纯文本吗?
  2. 加密在哪里发生?
  3. 您是否编写过加密代码或使用其中一种标准?
  4. 在您的代码中,我可以注意到以下问题:

    1. 您已经创建了连接对象和命令对象,尽管您从未对数据库执行过查询。
    2. 您正在使用的查询返回整个用户表,这绝对不是必需的。您已经拥有用户名和密码的用户输入,因此只需查看它们是否正确。
    3. 使您的查询参数化并将输入发送到数据库。在那里,检查用户名和密码是否匹配。如果他们这样做,请发送回用户详细信息(我想在应用程序中需要某个地方),否则抛出异常或返回null。
    4. 在匹配用户名和密码之前,请务必注意加密/解密。