2011-08-04 3 views
0

jQuery의 $.ajax()을 사용하여 자바 스크립트에서 호출하는 웹 서비스 (ASP.NET 2.0)가 있습니다. 나는 세션 키가 보안 목적으로 이런 상황에서 종종 nonce로 사용된다고 들었다. 웹 서비스는 키를 매개 변수 중 하나로 사용하고 현재 세션 키와 일치하는 경우에만 데이터를 반환합니다.웹 서비스 보안을위한 ASP.NET 세션 키?

나는 모든 Page_Load (즉, 모든 포스트 백)에서 숨겨진 필드의 값을 현재 SessionID로 설정 한 다음 자바 스크립트에서 매개 변수로 전달하여이 작업을 시도하고 있습니다. 하지만 웹 서비스의 현재 키 (Context.Session.SessionID)와 같은 키는 아닙니다.

해결할 수 있습니까, 아니면 다른 방식으로해야합니까?

EDIT : 요청시 숨겨진 필드에 세션을 설정하는 코드입니다. (즉 if (!Page.IsPostBack)로 포장하지. 당신이 세션 상태를 사용할 때까지

+0

현재 세션 ID에 숨겨진 필드의 값을 설정 "에 대한 코드를 게시 할 수 없습니다 : 여기

String GetCSRFToken() { String token = (String)Session["CSRFToken"]; if(token == null) { token = GenerateLongRandomString(); Session["CSRFToken"] = token; } return token; } void AssertValidCSRFToken(String token) { if(token != GetCSRFToken()) { throw new Exception("Invalid Request!") } } 

은 이런 종류의 공격을 방지에 대한 자세한 정보와 또 다른 질문에 대한 링크입니다 모든 Page_Load (즉, 모든 포스트 백)에 " – shashi

+0

@sassyboy - 완료. –

답변

2

Asp.net 실제로 모든 요청에 ​​대해 새로운 세션 ID를 생성하지 어떤 조건 아래에서의 .ascx 컨트롤의 Page_Load에서의

hfSession.Value = Context.Session.SessionID; 

어떤 값을 저장합니다.이 값이 다른 이유 일 수있다. 시도하고 세션에서 뭔가를 저장합니다. 새로운 세션 ID는 세션 때까지 페이지가로드가 실제로 할당 될 때마다 생성됩니다 아마

Session["SessionID"] = Context.Session.SessionID; 
hfSession.Value = Context.Session.SessionID; 
+1

그랬습니다. 감사! –

0

을. 그래서 세션에 실제로 아무 것도 할당하지 않으면 각 페이지로드시마다 SessionID가 변경됩니다.

2

나는 CSRF (Cross Site Script Request Forgery)를 방지하려고한다고 생각합니다. 세션 ID는 실제로 쿠키로 전송되며 공격자가이를 설정할 수 있습니다. 세션 ID 자체를 사용하는 대신 Session 변수에 저장된 임의로 생성 된 번호를 사용해야합니다.

CSRF Validation Token: session id safe?

+0

좋은 지적. 앞으로이 사이트에서 SSL을 추진 하겠지만, 그런 일이 발생하지 않으면 난수를 사용하도록 변경할 것입니다. –