2013-01-23 2 views
1

편집 일부는이 문제에서 제시된 특정 솔루션에 대한 싫어함을 나타내지 만 완전히 다른 방법을 제안하는 데 시간을 낭비하지 마십시오. 나는 내가하고있는 것에 대한 요구를 통제 할 수 없다. 당신이 그것에 동의하지 않고 대답이 없다면, 그냥 따라 가십시오. 감사.안전한 사이트를 유지하기 위해 사용자 이름을 세션 속성에 저장하십시오.

처음에는 이것이 연습 프로젝트이며 일반인이 사용하지 않습니다. 사용자 이름에 대한 세션 속성을 사용하여 웹 사이트의 일부 페이지를 보호해야합니다. 올바른 사용자 이름과 암호 콤보를 입력하면이 문제 (세션에 저장된 사용자 이름)가 발생합니다. 내 상사가 내 구현을 검토하고 "사용자 이름 값을 HttpSessionState에 직접 저장하는 것은 잘못되었으므로 세션의 사용자 이름 속성을 설정하고 세션 개체를 HttpSessionState에 저장해야합니다"라고 말했습니다. 이제 그는 코드의 어떤 부분을 언급하고 있는지 이해하고 있다고 생각하지만 보안을 깨뜨린다면 누구나 단일 사용자가 로그인하면 누구나 페이지에 직접 링크를 사용할 수 있습니다.

코드의 주석을 반드시 읽으면서 문제의 행을 설명하기 위해 추가했습니다.

보안의 측면에서 어떤 일을하지만, 사용자 이름은 HttpSessionState에 직접 저장됩니다

//login.ascx.cs 
private void Login_Click(object sender, EventArgs e) 
{ 
    if (sender == null || e == null) 
    { 
     throw new ArgumentNullException("Null Exception: Login_Click"); 
    } 

    User user = new User();    
    user.Login(_username.Text, _password.Text);   

    if (user.IsValid() && user.GetIsUser() != false) 
    { 
     user.Save(); 
     //the line below is what I used to make the secure pages work properly. 
     //but based on what my boss says, I think this is what should be changed. 
     Session["Username"] = _username.Text; 
     //What i tried instead was to set 'MySession.Current.Username = _username.Text;' 
     //which allowed successful login, but the pages became insecure once again. 
     Response.Redirect("Secure/Default.aspx"); 
    } 
    else 
    { 
     DisplayErrors(user._validationErrors); 
    } 
    _errors.Text = errorMessage;  
}  

및 MySession.cs을

public string Username 
{ 
    get 
    { 
     if (HttpContext.Current.Session["Username"] == null) 
     { 
     return string.Empty; 
     } 
     else 
     { 
     return HttpContext.Current.Session["Username"].ToString(); 
     } 
    } 
    set 
    { 
     //when the line below is uncommented, the secure pages are vulnerable 
     //but if I comment it out, they work properly. 
     //HttpContext.Current.Session["Username"] = value; 
    } 
} 

그래서 내가 어떻게 Set the username property of the session, and store the session object into the HttpSessionState 여전히 보안 사이트를 유지하면서?

편집 : @Win, 보안 내 /하여 default.aspx.cs가

private void Page_load(object sender, System.EventArgs e) 
{ 
    ... 
    if((string)Session["Username"] != _labelusername.Text) 
    { 
     Response.Redirect(redirectLogin); //to login page 
    } 
    else {} //success 
} 
+1

이용 회원이 아닌 세션 : 많은 온라인 이와 같은 사례가있다. –

+2

나는 내 첫 번째 라인이 명확하게 만들었다 고 생각했다. 이것은 훈련을위한 프로젝트이고, 이것을하는 것이 프로젝트의 일부가 아니며 그렇게하는 것이 부정적인 것이다. 그것은 내가 당신의 미래에 그것을 할 가능성이 매우 높습니다. – Nibirue

+0

그 점을 이해합니다. 그러나 멤버쉽은 사용하기가 정말 쉽습니다. 왜 당신이 무언가를 잘못함으로써 "훈련"하는 이유를 이해할 수 없습니다. 세션은 보안에 민감한 정보를 저장하는 데 사용할 수 없습니다. * 사용자 별 캐시입니다. 어떠한 종류의 인증이나 보안에도 사용하지 마십시오! –

답변

관련 문제