2010-06-16 7 views
1

현재 사용자 및 사용자의 역할을 세션 상태 (System.Web.SessionState.HttpSessionState Page.Session)에 저장하는 응용 프로그램을 개발 중입니다. 좀 excecution에 권한을 부여하기위한 뒤에 코드에서이 세션 상태를 확인한 후ASP.NET 세션 상태를 변경하는 XSS

 if (Session["username"] == null) 
      Session.Add("username", User.Identity.Name); 

     if (Session["isAdministrator"] == null) 
      Session.Add("isAdministrator", User.IsInRole(domain + "\\Domain Admins")); 

는 :

if ((bool)Session["isAdministrator"] || computer.Administrators.Contains(Session["username"].ToString())) 

내 질문은 다음과 같습니다 메커니즘은 얼마나 안전하다고? 일부 자바 스크립트 또는 일부 다른 방법을 사용하여 세션 상태를 변경할 수 있습니까?

감사 :

답변

1

상태가 서버에만 저장되므로 상태 인을 자바 스크립트 또는 기타 클라이언트 측 메커니즘을 사용하여 변경할 수 없습니다. 그러나 악의적 인 사용자가 세션 쿠키의 내용을 파악하여 세션을 가로 챌 수있는 것은 다른 사람들이 지적한 바와 같습니다.

ASP.NET은 이러한 약점을 염두에두고 설계되었으므로 세션 ID는 길고 예측하기가 어렵습니다. 또한 세션 쿠키는 HTTP 전용으로 표시되어 있습니다. 즉, 대부분의 최신 브라우저는 자바 스크립트 코드에서 액세스하지 못합니다.

0

일반적으로 이것은 XSS 공격으로부터 매우 안전하다고 말할 수 있습니다. ASP.Net은 기본적으로 사용자 세션 ID가 포함 된 쿠키를 기반으로 사용자 세션을 추적합니다. 브라우저 쿠키 목록을 열고 사이트의 쿠키 목록을 열면 ASP.Net 세션이라는 이름이 나타납니다. SessionID는 고유하고 증분이 아닙니다. 아마 GUID의 약간의 차이.

보안을 강화하기 위해 web.config에서 사용자 세션을 유지하는 기간을 지정할 수도 있습니다. 민감한 정보를 다루는 경우이 제한 시간을 상대적으로 짧은 시간 (어쩌면 10 분간 사용하지 않음)으로 설정하고 싶을 수 있습니다. 기본값은 20 분입니다. 자세한 내용은 @http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.timeout.aspx을 참조하십시오. User.Identity.Name 만약

2

--Peter

<system.web> 
    <sessionState timeout="10" /> 
</system.web> 

을 설정, 왜 당신은 Session에 넣어해야합니까? User.IsInRole(domain + "\\Domain Admins")에 직접 전화를 걸어 보시거나 (도우미로 포장하십시오) Windows 인증을 사용하고있는 것처럼 보이기 때문에 세션에서 사용자 이름을 설정하는 것은 불필요합니다.

XSS 질문의 경우 세션은 세션 ID를 쿠키에 저장하므로 이론적으로 공격자는 HTTP 트래픽을 스니핑하거나 JavaScript 코드를 페이지에 삽입 한 다음 쿠키를 사용하고 다른 사용자로 가장합니다.

+0

예, 감사합니다. User.Identity.Name을 세션 상태 값이 아닌 직접 비교하는 것이 더 좋습니다. –

관련 문제