0

우리는 ASP.NET MVC4 웹 응용 프로그램을 보유하고 있으며 QA 환경에서 동일한 웹 사이트에 다른 "사이트"를 웹 응용 프로그램으로 설정합니다.ASP.NET MVC AuthorizeAttribute 승인되지 않은 구매자 허용

모든 쿠키
www.mysite.co.uk/WebApp1 
www.mysite.co.uk/WebApp2 
www.mysite.co.uk/WebApp3 

, 우리는 쿠키 키가 특정 웹 응용 프로그램에 그 쿠키를 묶어 ID가 포함되어 있는지 확인, 그래서 교차 오염이 없다.

이제이 모든 것이 완벽하게 잘 작동합니다. 그러나 매우 가끔 DEV 환경에서는 GUEST 구매자 (인증되지 않음)가 [Authorize] 속성으로 표시된 컨트롤러의 Action 메소드에 액세스 할 수 있습니다. 여기

추측 브라우저가 다른 웹 응용 프로그램에 여러 탭이있는 각각의 포인팅을 사용하고 있으며, 때때로 브라우저/서버가있는 ASPXAUTH 쿠키를 통해 사용하는 혼란지고,과에서 하나를 사용하고 있다는 점이다 인증 된 구매자를위한 다른 웹 애플리케이션. 앞에서 말했듯이 이것은 단지 추측이지만 사이트를 디버깅하여이 속성으로 보호 된 코드에서 확실히 중단 점을 치고 있습니다.

이 시점에서이 동작을 어떻게 막을 수 있는지 명확하지 않습니다.

감사

그리피스 모든 쿠키

+0

'모든 쿠키에 대해 쿠키 키에 특정 웹 응용 프로그램의 쿠키를 연결하는 ID가 포함되어 있으므로 교차 오염이 발생하지 않습니다. '- 귀하의 질문에서 어떻게 작동하는지 정확하게 확장 할 수 있습니까? 이것이 올바르게 작동하면 잘못된 사이트에서 승인해서는 안됩니다. – SilverlightFox

+0

이것은 우리가 우리의 응용 프로그램에서 관리하는 쿠키를 참조합니다. ASPXAUTH 쿠키는 우리의 통제 범위를 벗어났습니다 (저는 믿습니다). 그래서 애플리케이션이나 사이트에만 묶여 있는지 알 수 없습니다. 사이트라면 응용 프로그램에 묶을 수 있습니까? – DrGriff

+0

'ASPXAUTH' 내부에 저장된 암호화 된 토큰에 ID를 추가하고이 요청을 확인하거나 토큰을 사이트마다 다른 키로 암호화 할 수 있습니다.DEV 환경 내에서 공존 할 수 있도록이 쿠키에 대한 사용자 정의 이름이 있어야합니다. – SilverlightFox

답변

0

, 우리는 쿠키 키는 특정 웹 응용 프로그램에 그 쿠키를 묶어 ID를 포함하고 있는지 확인, 그래서 교차 오염이 없다

사용자 지정 쿠키 내에 ID를 저장하고 있지만 ASP.NET이 [Authorize] 특성으로 표시된 코드에 액세스 권한을 부여하기 위해 사용하는 인증 쿠키 내에이 ID를 저장하지 않는 것으로 보입니다.

auth 쿠키 내에 저장된 암호화 된 토큰에 ID를 추가하고이 요청을 확인하거나 토큰을 사이트마다 다른 키로 암호화 할 수 있습니다.

FormsAuthenticationTicket constructor에는 사용자 지정 데이터에 사용할 수있는 userdata 매개 변수가 포함되어 있습니다.

public FormsAuthenticationTicket(
    int version, 
    string name, 
    DateTime issueDate, 
    DateTime expiration, 
    bool isPersistent, 
    string userData 
) 

당신은 쉽게과 같이 JSON 형식을 사용하여 여러 정보를 저장하기 위해 follow this guide 할 수 있습니다 - 그들은 공동 수

public static class HttpResponseBaseExtensions 
{ 
    public static int SetAuthCookie<T>(this HttpResponseBase responseBase, string name, bool rememberMe, T userData) 
    { 
     /// In order to pickup the settings from config, we create a default cookie and use its values to create a 
     /// new one. 
     var cookie = FormsAuthentication.GetAuthCookie(name, rememberMe); 
     var ticket = FormsAuthentication.Decrypt(cookie.Value); 

     var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, 
      ticket.IsPersistent, userData.ToJson(), ticket.CookiePath); 
     var encTicket = FormsAuthentication.Encrypt(newTicket); 

     /// Use existing cookie. Could create new one but would have to copy settings over... 
     cookie.Value = encTicket; 

     responseBase.Cookies.Add(cookie); 

     return encTicket.Length; 
    } 
} 

당신은 또한 사이트 당이 쿠키에 대한 사용자 정의 이름을 가져야한다 DEV 환경 내에 존재하십시오.

+0

Excellent, ASPXAUTH 쿠키에 사용자 정의 데이터를 추가하는 방법이 명확합니다. - 감사합니다. 그래서 들어오는 요청은 어떻습니까? 내 추측은 여기에 우리 자신과 함께이 [ASPXAUTH 쿠키가 내가 설정 한 사용자 정의 정보가 포함되어 있는지 확인하는 기본 [권한 부여] 특성을 무시해야 할 것입니다. 그러나 그렇지 않으면 어떻게 될까요? 내 웹 사이트의 다른 웹 응용 프로그램에서 가져온 것이면 어떻게 될까요? 올바른 것을 어떻게 골라야합니까? – DrGriff

+0

@DrGriff : [이 답변] (http://stackoverflow.com/a/18139294/413180) 유용 할 수 있습니다 - 모든 요청이 페이지에서 처리되기 전에 값을 확인하고 티켓이 만료되면 사이트의 잘못된 ID입니다. auth 쿠키에 대해 사이트마다 다른 쿠키 이름을 설정하면 ([web.config'의'forms' 요소에'name' 속성을 설정하기 만하면됩니다] http://msdn.microsoft. com/ko-ko/library/1d3t3c61 (v = vs.85) .aspx)). 그러나 응용 프로그램의 보안을 위해이를 반드시 확인해야합니다. – SilverlightFox

+0

@DrGriff : 도움이 더 필요하십니까? – SilverlightFox

관련 문제