2012-11-19 78 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。 –

相关问题