2012-11-19 118 views
1

我開發了一個內聯網基於web的應用程序,它運行良好。該系統只針對我公司的一個部門。來自本部門之外的任何用戶在嘗試瀏覽系統時都會收到錯誤頁面。系統將通過將他的網絡ID傳遞給Active Directory來檢查用戶信息,並從那裏獲取他的信息。爲此,我創建了一個名爲Security的類。 然後我把我的母版頁以下:檢查數據庫中是否存在用戶?

if (Security.isMember(netID)) 
     { 
      ................ 
     } 
     else 
      Response.Redirect("Error.aspx"); 

後臺代碼:

public static bool isMember(string userid) 
    { 
     if (Org.Code == "Org. Code") 
      return true; 
     else 
      return false; 
    } 

由於用戶會是他第一次瀏覽到後添加到數據庫網站,我想修改安全類中的以前的方法來檢查用戶是否存在於數據庫中。如果不是,系統應該使用安全類來檢查用戶是否屬於該部門。我不知道是誰在前面的方法中爲數據庫中的用戶存在檢查代碼。你能幫我解決嗎?

我檢查用戶的存在在數據庫初始化代碼:

if (!String.IsNullOrEmpty(userid)) 
     { 
      string username = userid; 
      string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=Test;Integrated Security=True"; 
      string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'"; 
      using (SqlConnection conn = new SqlConnection(connString)) 
      { 
       conn.Open(); 
       // Open DB connection. 
       using (SqlCommand cmd = new SqlCommand(cmdText2, conn)) 
       { 
        cmd.ExecuteScalar(); 
       } 
      } 
     } 

是通過方法的安全類修飾是這樣的:

public static bool isMember(string userid) 
    { 
     if (!String.IsNullOrEmpty(userid)) 
     { 
      string username = userid; 
      string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=Test;Integrated Security=True"; 
      string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'"; 
      using (SqlConnection conn = new SqlConnection(connString)) 
      { 
       conn.Open(); 
       // Open DB connection. 
       using (SqlCommand cmd = new SqlCommand(cmdText2, conn)) 
       { 
        cmd.ExecuteScalar(); 
       } 
      } 

      return true; 
     } 
     else if (Org.Code == code) 
      return true; 
     else 
      return false; 
    } 

但是通過這樣做,即使他們不在該部門,該系統對所有人開放。 那麼如何解決這個問題呢?

+0

如果正在執行'else if',則將userid作爲空字符串傳遞。 – fofik

回答

1

你必須檢查所執行的命令的結果:

var count = (int) cmd.ExecuteScalar(); 
return count == 1; // return true if there's only one employee with given name 

還可以防止SQL注入攻擊和修改

string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'"; 

string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = @UserName"; 

和設置參數值代碼

cmd.Parameters.Add("@UserName", SqlDbType.VarChar); 
cmd.Parameters["@UserName"].Value = userName; 
+0

非常感謝您的幫助。我真的很欣賞它。另外,你能否看到我更新的代碼?因爲我跟着你告訴我的,現在我正面臨着一些事情。 –

+0

'userId'參數的值是什麼? –

+0

它是一個由8個字符組成的字符串,代表用戶的網絡ID。 –

相關問題