2012-11-19 4 views
1

인트라넷 웹 기반 응용 프로그램을 개발했으며 잘 작동합니다. 이 시스템은 내 회사의 한 부서에만 전용으로 사용됩니다. 이 부서 외부의 모든 사용자는 시스템을 찾아 볼 때 오류 페이지를 받게됩니다. 시스템은 네트워크 ID를 Active Directory에 전달하여 사용자 정보를 확인하고 거기에서 그의 정보를 가져옵니다. 이를 위해 보안이라는 클래스를 만듭니다. 사용자가 거 야에 자신의 첫 번째 검색 한 후 데이터베이스에 추가 할 수 있기 때문에데이터베이스에 사용자가 있는지 확인하고 있습니까?

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

:

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

코드 숨김 : 그리고 나는 내 마스터 페이지에 다음을 넣어 웹 사이트에서 보안 등급에있는 이전 방법을 수정하여 사용자가 데이터베이스에 있는지 여부를 확인하고 싶습니다. 그렇지 않은 경우, 시스템은 Security 클래스를 사용하여 사용자가 해당 부서에 속하는지 여부를 확인해야합니다. 이전 방법으로 데이터베이스에 사용자의 존재 여부를 확인하는 코드를 넣을 사람을 모르겠습니다. 이걸 좀 도와 주실 래요?

데이터베이스에서 사용자의 존재 확인에 대한 나의 초기 코드 : 나는 보안 클래스의 방법으로 수정

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; 
    } 

그러나 이렇게

, 시스템은 부서 외부에 있더라도 모두에게 개방되어있었습니다. 이렇게 이것을 고치는 방법?

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"; 

을 수정하고 매개 변수 값을 설정 :

+0

'else if'를 실행 중이면 userid를 빈 문자열로 전달합니다. – fofik

답변

1

당신은 실행 된 명령의 결과를 확인해야 코드 내

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

도움 주셔서 대단히 감사합니다. 정말 고맙습니다. 또한, 내 업데이트 된 코드를 참조 할 수 있습니까? 네가 나에게 한 말을 따라했기 때문에 나는 이제는 어떤 일에 직면하고있다. –

+0

'userId' 매개 변수의 값은 무엇입니까? –

+0

8 자의 문자열로 사용자의 네트워크 ID를 나타냅니다. –

관련 문제