2014-12-10 2 views
1

내가 작업하고있는 웹 응용 프로그램은 세션을 제대로 파괴하지 않으므로 탈취가 매우 쉽습니다. 로그 오프하고 쿠키를 입력 할 수 있습니다 .EpiserverLogin 및 .ASPXRoles 및 im을 응용 프로그램 내부에 다시 ​​넣을 수 있습니다. 세션을 삭제하기위한 현재 코드는 다음과 같습니다.세션을 파괴하는 방법 ASP.NET/Episerver

HttpContext.Current.Session.Clear(); 
HttpContext.Current.Session.Abandon(); 
HttpContext.Current.Session.RemoveAll(); 
HttpContext.Current.User = null; 
System.Web.Security.FormsAuthentication.SignOut(); 

내가 잘못하고있는 것에 대한 도움은 크게 강조됩니다!

편집 : 여기 내 Web.config의

<authentication mode="Forms"> 
    <forms name=".EPiServerLogin" loginUrl="CustomLogin.aspx" timeout="50" /> 
</authentication> 

내 인증이다 그리고 이것은 내가 로그인 사용자를 확인하는 방법입니다

var validated = Membership.ValidateUser(username, password); 
if (validated) 
{ 
    FormsAuthentication.SetAuthCookie(username, true); 
    Response.Redirect("/"); 
} 
+0

web.config의 섹션을 게시하십시오. –

+0

logincode 및 인증 모드로 업데이트했습니다 – Jinxen

+0

"매우 납치되기 쉽습니다"라는 진술을 백업 할 수 있습니까? 어떤 유형의 가로 채기에 대해 이야기하고 있습니까? 세션 하이재킹 또는 로그인 도용 (FormsAuth-cookie)? – sisve

답변

1

세션 및 인증 쿠키가 정말 관련이 없습니다. 인증 쿠키는 사용자가 로그인 한 경우 웹 서버에 요청을 보낸 사용자에게 알립니다. 비활성으로 인해 세션 시간이 초과 된 경우 (기본값이 아닌 경우 기본값 20 분 후) 사용자에 대한 새 세션이 만들어집니다 다음 요청

인증 쿠키를 특정 세션에 연결하려면 고유 한 FormsAuthenticationTicket을 생성하고 userData를 세션 ID로 설정하여이를 해결할 수 있습니다. 그런 다음 티켓을 암호화하고 쿠키를 만들어 클라이언트에 보냅니다. 그런 다음 각 요청에서 티켓을 해독하고 userData 값이 세션 ID와 동일한 지 확인하십시오. 그렇지 않으면 Session.Abandon() 및 FormsAuthentication.SignOut()을 수행하십시오. 쿠키가 복원 되더라도 새 세션이 만들어지면 세션 ID가 변경됩니다.

부하 분산 솔루션을 사용하고 InProc 세션 상태를 사용하는 경우이 솔루션은 작동하지 않습니다.

관련 문제