대한 서브 도메인에 생성 한 쿠키 아무 것도 반사기 보았다 갖는 그럼 기계 키 형태의 (다소 불법) 특징이있다 인증. EnableCrossAppRedirects
이 활성화되면 .NET은 인증 쿠키를 찾는 것 외에도 양식 게시 또는 쿼리 문자열에서 폼 인증 "쿠키"를 추출하려고 시도합니다. 이 코드는 ExtractTicketFromCookie
메서드의 FormsAuthentication
클래스에 포함되어 있으며 요청 데이터에서 인증 쿠키를 찾으려는 시도가 명확하게 표시됩니다. 당신이 두 응용 프로그램에 EnableCrossAppRedirects
을 사용하는 경우
if (FormsAuthentication.EnableCrossAppRedirects)
{
text = context.Request.QueryString[name];
if (text != null && text.Length > 1)
{
if (!cookielessTicket && FormsAuthentication.CookieMode == HttpCookieMode.AutoDetect)
{
cookielessTicket = CookielessHelperClass.UseCookieless(context, true, FormsAuthentication.CookieMode);
}
try
{
formsAuthenticationTicket = FormsAuthentication.Decrypt(text);
}
catch
{
flag2 = true;
}
if (formsAuthenticationTicket == null)
{
flag2 = true;
}
}
if (formsAuthenticationTicket == null || formsAuthenticationTicket.Expired)
{
text = context.Request.Form[name];
if (text != null && text.Length > 1)
{
if (!cookielessTicket && FormsAuthentication.CookieMode == HttpCookieMode.AutoDetect)
{
cookielessTicket = CookielessHelperClass.UseCookieless(context, true, FormsAuthentication.CookieMode);
}
try
{
formsAuthenticationTicket = FormsAuthentication.Decrypt(text);
}
catch
{
flag2 = true;
}
if (formsAuthenticationTicket == null)
{
flag2 = true;
}
}
}
}
은 따라서 다음 첫 번째 응용 프로그램은 외부 사이트로 리디렉션 할 수있는 권한, 두 번째 응용 프로그램이 자동으로 요청에서 인증 쿠키에 읽습니다. 반환 로그인 URL이 쿠키 데이터를 게시하거나 쿼리 문자열에 보냅니다. 또한 컴퓨터 키가 동기화되었는지 또는 외부 앱 컴퓨터 키 (첫 번째 앱에서)를 사용하여 쿠키가 암호화되어 있는지 확인해야합니다. 기본적으로 .NET은 사용자를 위해 쿼리 문자열에 암호화 된 인증 쿠키를 보내고 컴퓨터 키가 동기화되어 있다고 가정합니다 (아래 MSDN 인용문 참조).
여기 좀 더 info on MSDN입니다.
CookiesSupported 속성이 true이고, ReturnUrl 변수 중 하나가 현재 응용 프로그램 내에 또는 EnableCrossAppRedirects 속성이 true이면
는 다음 같이 RedirectFromLoginPage 메서드는 인증 티켓 및 기본 쿠키 장소가 사용을 발행 SetAuthCookie 메서드.
CookiesSupported가 false이고 리디렉션 경로가 현재 응용 프로그램의 URL 인 경우 티켓은 리디렉션 URL의 일부로 발행됩니다. CookiesSupported가 false의 경우, EnableCrossAppRedirects 사실이며, 리디렉션 URL은 현재 응용 프로그램 내에서 페이지를 참조하지 않습니다는 같이 RedirectFromLoginPage 메서드는 인증 티켓 및 쿼리 문자열 특성에서 장소를 발행합니다.
보안에 대한 큰 경고가 있습니다. EnableCrossAppRedirects
은 ASP.NET 로그인 컨트롤이 외부 반환 URL (다른 웹 응용 프로그램)로 리디렉션되지 않도록하는 보안 설정입니다. 이 설정을 사용하면 일부 공격 형태로 악용 될 수 있습니다. 즉, 사용자는 공식 로그인 페이지로 보내지 만 로그인하면 동일한 것으로 믿을 수있는 다른 응용 프로그램으로 리디렉션됩니다. 이것이 기본적으로 사용 중지 된 이유입니다.
하나는 기능을 사용하는 경우 다음과 같이이 문제를 완화하는 방법 :
는 응용 프로그램 간 리디렉션을 사용할 때 보안을 향상 시키려면 리디렉션에게 단지에 승인 된 웹 사이트를 허용하도록 같이 RedirectFromLoginPage 메소드를 오버라이드 (override) .
은 또한 차단 사람이 계정의 관리 권한을 획득 할 수있을 것 같은 리디렉션 요청, 운송에서 "쿠키"를 보호하기 위해 SSL을 통해 제공됩니다 확인해야합니다.
죄송합니다. 내 대답이 수정되었습니다. 양식 쿠키 또는 양식 문자열을 자동으로 선택하는 .NET의 숨겨진 기능이 있습니다. 방금 새로운 것을 배웠습니다! – TheCodeKing
좋은 답변입니다! 그래서 나는 '쿠키 없음'인증 기능을 파괴하고 있습니다. 재 보안 위험 : RedirectFromLoginPage를 사용하지 않기 때문에 사용자가 리디렉션되는 위치를 제어합니다. SSL을 통한 리디렉션 - POST/쿼리 문자열의 토큰은 formsauth 쿠키보다 덜 안전합니다. 가장 안전한 방법은 SSL을 통해 전체 웹 사이트를 배치하는 것입니다. – russau
BTW - 왜 커뮤니티 위키입니까? 내가 그 상을 수여받을 때도 현상금을받을 수 있겠 니? – russau