1

我正在尝试创建一个登录页面。我有一个名为 Login 的数据库表,它有两列:ID 和 Password。它包含以下 ID 和密码对:第一行:(13282,123456),第二行:(11111,11111)。如果用户名和密码正确,我将页面重定向到succesful.aspx,如果用户名或密码错误,我将页面重定向到unsuccesful.aspx。我的问题是,当我输入 13283 作为 ID 和 123456 作为密码时,一切正常,我被重定向到成功页面。但是当我输入 ID=11111 和 Password=11111 时,即使一切都是真的,它也会重定向到不成功的页面。我认为问题是,我的查询只检查第一行。这是代码:

 protected void loginButton_Click(object sender, EventArgs e)
{

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=University;Integrated Security=True;Pooling=False";


    Int32 verify;
    string query1 = "Select count(*) from Login where ID='" + idBox.Text + "' and Password='" + passwordBox.Text + "' ";
    SqlCommand cmd1 = new SqlCommand(query1, con);
    con.Open();
    verify = Convert.ToInt32(cmd1.ExecuteScalar());
    con.Close();
    if (verify > 0)
    {
        Response.Redirect("succesful.aspx");
    }
    else
    {
        Response.Redirect("unsuccesful.aspx",true);
    }

}
4

1 回答 1

3

这种方法有几个问题:

  • 它需要以纯文本形式存储密码——这是对用户密码所能做的最糟糕的事情:任何意外访问您的数据库的人都会立即拥有您所有用户的密码,这非常非常糟糕。
  • 它容易受到 SQL 注入攻击- 连接字符串以生成 SQL 命令是危险的,因为恶意用户可以输入破坏您的 SQL 的字符串并将其变成其他东西

你应该研究这个问题的答案。那里讨论的方法并不像您正在实施的那样简单,但它们使您的系统更加防弹。

于 2013-05-14T00:14:10.210 回答