【问题标题】:How to validate Password and Username for website in c#如何在c#中验证网站的密码和用户名
【发布时间】:2017-02-18 11:47:35
【问题描述】:

我有一个简单的登录网站,这是我在 Visual Studio 2015 中的第一个网站项目。我已经成功创建了一个 SQL 数据库,其中包含用户名、密码、电子邮件和国家/地区等用户信息,并且我还成功创建了用户注册新用户可以在那里输入详细信息的页面,这些详细信息将被添加到数据库中。这一切都很好。

但我在尝试根据 SQL 数据库中包含用户数据的行中的存储值验证用户名和密码时遇到了障碍,以使用户可以访问仅限成员的页面。

这是我的代码 sn-p 用于当用户单击登录按钮时。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString);
        con.Open();
        string checkUser = "SELECT * FROM Members where Username= '" + TextBoxSignUser.Text + "' and Password= '" + TextBoxSignPass.Text + "'";
        SqlCommand cmd = new SqlCommand(checkUser, con);
        cmd.ExecuteNonQuery();
        con.Close();

我知道我需要做的可能类似于下面的伪代码,但我不确定如何根据数据库中的存储值验证这些信息。

if ("Username" and "Password" == the value of Username and Password TextBox.Text)
{
        Response.Write("Sign in successful");
        Response.Redirect("MemberTestPage.aspx");
}
else
{
Response.Write("Details incorrect, Please try again")
}

【问题讨论】:

  • 在完全理解 SQL 注入和密码散列的概念之前,不要尝试编写有关用户和密码的代码。
  • 嗨彼得,这个例子只是为了练习一个简单的登录程序,在我知道我可以安全地存储信息之前,不会将敏感数据存储在数据库中。我已经开始学习密码散列技术以及如何避免 SQL 注入。尽管如此,我还是感谢您的建议

标签: c# asp.net validation passwords


【解决方案1】:

使用数据适配器填充数据表,您将数据放入数据表中,您可以获取查询的返回值并匹配参数

        DataTable Dt = new Datatable();
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(dt);

        if (dt.rows.count > 0 ) 
        {
           //MATCH FOUND
        }

【讨论】:

    【解决方案2】:

    你可以用like..

    string query= "SELECT * FROM Members where Username= 'usr' and Password= 'pwd'";
        SqlCommand cmd = new SqlCommand(query, con);
        MySqlDataAdapter objda = new MySqlDataAdapter(cmd);
        DataSet objDs = new DataSet();
        objda.Fill(objDs);
        if(objDs.Tables[0].Rows.Count>0)
        {
              Response.Write("Sign in successful");
              Response.Redirect("MemberTestPage.aspx");
        }
    

    【讨论】:

      【解决方案3】:

      您可以在不使用数据集的情况下执行以下操作,

      var con = new SqlConnection("your connection string goes here");
      SqlCommand cmd = new SqlCommand("SELECT * FROM Members where Username= 'usr' and Password= 'pwd'", con);
      bool result = false;
      cmd.Connection.Open();
      using (cmd.Connection)
      {
          SqlDataReader dr = cmd.ExecuteReader();
          if (dr.HasRows)
              result = true;
      }
      if (result == true)
          // Login successful
      else
          // Login failed
      

      【讨论】:

        【解决方案4】:
        string query = string.Format("SELECT TOP 1 * FROM [Table] WHERE Username = '{0}' and Password = '{1}'", txtUsername.Text, txtPassword.Text);
        command = new OleDbCommand(query, con);
        var reader = command.ExecuteReader();
        
        if (reader.HasRows)
        {
          //successfully login
        }
        else
          //error message
        

        【讨论】:

          【解决方案5】:

          我认为首先出于最佳性能和高安全性等原因,最好使用 ADO.NET 库。这是我的建议。希望对你有用:

          using System.Data.SqlClient;
          ...
          
          string conStr = ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString;
          string sql = "SELECT * FROM Members where Username = @user and Password = @pass";
          SqlParameter pUser = new SqlParameter("@user", TextBoxSignUser.Text);
          SqlParameter pPass = new SqlParameter("@pass", TextBoxSignPass.Text);
          using (SqlConnection con = new SqlConnection(conStr))
          {
              using (SqlCommand cmd = new SqlCommand(sql, con))
              {
                  cmd.Parameters.Add(pUser);
                  cmd.Parameters.Add(pPass);
          
                  con.Open();
          
                  using (SqlDataReader reader = cmd.ExecuteReader())
                  {
                      if (reader.Read())
                      {
                          // Successfully signed in
                          // Also you can access your fields' value using:
                          //    1. its index (e.x. reader[0])
                          //    2. or its name: (e.x. reader["Username"])
                      }
                      else
                      {
                          // Login failed
                      }
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-15
            • 2014-12-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-29
            • 1970-01-01
            相关资源
            最近更新 更多