인트라넷 웹 기반 응용 프로그램을 개발했으며 잘 작동합니다. 이 시스템은 내 회사의 한 부서에만 전용으로 사용됩니다. 이 부서 외부의 모든 사용자는 시스템을 찾아 볼 때 오류 페이지를 받게됩니다. 시스템은 네트워크 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";
을 수정하고 매개 변수 값을 설정 :
'else if'를 실행 중이면 userid를 빈 문자열로 전달합니다. – fofik