c# - 具有两个访问级别的登录系统

标签 c#

我正在尝试创建一个具有两个访问级别的登录系统。如果访问级别为 1,他们将收到“护理人员主页”,如果级别为 2,他们将收到“管理员页面”。登录表单有一个变量,用于根据数据库中的凭据验证用户名和密码,当用户单击按钮并且 tryLogin 变量返回 true 时,访问级别取自数据库中的用户名与用户名文本匹配的数据库字段

消息显示无效的登录凭据,而不是加载任何表单。我花了很长时间研究这个,但我迷路了,我希望这足以解释问题。

public bool tryLogin(string uname, string pword)
        {
            MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
            MySqlCommand cmd = new MySqlCommand("SELECT * FROM Staff WHERE username = '" + uname + "' AND password ='" + pword + "';");
            cmd.Connection = con;
            con.Open();
            MySqlDataReader reader = cmd.ExecuteReader();



            if (reader.Read() != false)
            {
                if (reader.IsDBNull(0) == true)
                {
                    cmd.Connection.Close();
                    reader.Dispose();
                    cmd.Dispose();
                    return false;
                }
                else
                {
                    cmd.Connection.Close();
                    reader.Dispose();
                    cmd.Dispose();
                    return true;
                }
            }
            else
            {

                return false;

            }
        }



private void LoginBT_Click(object sender, EventArgs e)
        {


            if (tryLogin(uname.Text, pword.Text) == true)
            {
                MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
                MySqlCommand cmd2 = new MySqlCommand("SELECT access_level FROM Staff WHERE username = '" + uname + "';");

                cmd2.Connection = con;
                con.Open();


                MySqlDataReader reader = cmd2.ExecuteReader();

                if (cmd2.Equals("1"))

                {
                    this.Hide();
                    CarerHomePage CarerHomePage = new CarerHomePage();
                    CarerHomePage.Show();
                }

                if (cmd2.Equals("2"))
                {
                    this.Hide();
                    AdministratorHome AdministratorHome = new AdministratorHome();
                    AdministratorHome.Show();

                }


                else
                {
                    MessageBox.Show("Invalid Login Credentials");
                }



            }

        }

    }
}

最佳答案

您需要阅读有关 SQL 注入(inject)的内容。尝试添加文本

' 或 1 = 1 --

进入您的用户名文本框并尝试登录。您还应该考虑阅读有关内置的​​ asp.net 用户管理/角色的内容 - 角色位在这里将为您提供很好的服务。

此处来自 ScottGu 的良好链接:

http://weblogs.asp.net/scottgu/archive/2005/10/18/427754.aspx

关于c# - 具有两个访问级别的登录系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313620/

相关文章:

c# - 使用C#/C++,是否可以限制网络流量?

c# 类到 Js 类?

c# - 无法在 `MouseEventArgs` 事件中获取 `MouseHover`

c# - Azure Bot 使用 ngrok 为 channel 团队进行本地调试时抛出以下异常 "Failed to acquire token for client credentials."

c# - WPF - UI 未从命令更新

c# - 如何在 Silverlight 4 中设置数据网格的高度

c# - 在 C# 应用程序中播放视频

c# - 使用 Entity Framework 在运行时动态选择列

c# - 使用标志退出 BackgroundWorker

c# - Visual Studio C# Win-Forms 应用程序网络浏览器加载速度非常慢