簡體   English   中英

我可以使用 Environment.Username 和 MYSQL 來驗證登錄嗎?

[英]Can I use Environment.Username and MYSQL to verify log in?

        private void btnSubmitt_Click(object sender, RoutedEventArgs e)
        {
        try
        {
            i = 0;
            MySqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "Select * from users where  TX_EMPLOYEE='"; (Environment.UserName) & "'";
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            da.Fill(dt);

            i = Convert.ToInt32(dt.Rows.Count.ToString());
        }
        catch
        {
            MessageBox.Show("Database connection is not available at this time. Please contact your database administrator ");
        }
        finally
        {
            con.Close();
        }

我想使用他們的計算機登錄名和 MYSQL 數據表中列出的完全匹配來驗證用戶。 但是 Environment.Username 不是此 SQL 語句中的有效語法。

這一行是非常非常錯誤的:

cmd.CommandText = "Select * from users where  TX_EMPLOYEE='"; (Environment.UserName) & "'";

應該是這樣的:

cmd.CommandText = "Select * from users where  TX_EMPLOYEE='" + Environment.UserName + "'";

除了,它不應該是那樣的,因為 SQL 注入。 如果我可以將Environment.UserName設為' or 1 = 1 or TX_EMPLOYEE = '那么你的最終查詢將變成這樣:

Select * from users where  TX_EMPLOYEE='' or 1 = 1 or TX_EMPLOYEE = ''

這顯然不是您想要的 - 沒有憑據的人可以訪問它。 您應該改用 SQL 參數:

cmd.CommandText = "Select * from users where  TX_EMPLOYEE=?userName";
cmd.Parameters.AddWithValue("?userName", Environment.UserName);

另外,我對這段代碼感到困惑:

i = Convert.ToInt32(dt.Rows.Count.ToString());

DataTable.Rows.Count已經是一個int ,因此您要將數字轉換為字符串再轉換為數字。 為什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM