인증되지 않은 경우 사람들을 로그인 화면으로 안내하기 위해 asp.net mvc 페이지의 일부 작업에 인증 속성을 사용하고 있습니다. 내 문제는 그들이 로그인 한 후 참조 페이지로 그들을 반환하고 있습니다. 나는 단지 참조 동작 및 참조 컨트롤러를 추적하고 있었지만 일부 매개 변수를 추적해야 할 때 문제가됩니다. 내가 알지 못하는 어떤 멋진 트릭이 있나요?참조 페이지로 돌아 가기
7
A
답변
3
당신이 ASP.NET 로그인 페이지로 사용자를 리디렉션하고 FormsAuthentication를 사용하고있어 말했듯이
var urlReferrer = Request.UrlReferrer;
if (urlReferrer != null)
{
var url = "~" + Server.UrlDecode(urlReferrer.PathAndQuery);
// get routecollection
var routeCollection = new RouteCollection();
GlobalApplication.RegisterRoutes(routeCollection);
// mcok context
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
context.Expect(ctx => ctx.Request).Returns(request.Object);
// mock request
// TODO: convert querystring to namevaluecollection
// now it's just stripped
if (url.IndexOf('?') > 0)
{
url = url.Substring(0, url.IndexOf('?'));
}
var mock = Mock.Get(context.Object.Request);
// TODO: insert namevaluecollection of querystring
mock.Expect(req => req.QueryString).Returns(new NameValueCollection());
mock.Expect(req => req.AppRelativeCurrentExecutionFilePath).Returns(url);
mock.Expect(req => req.PathInfo).Returns(string.Empty);
// get routedata with mocked context
var routeData = routeCollection.GetRouteData(context.Object);
var values = routeData.Values;
return RedirectToAction(routeData.Values["action"].ToString(), values);
}
는 URL은 다음과 같은 :
있는 FormsAuthentication는, 예를 데리러하고 리디렉션 할 수 있도록http://www.mysite.com/Login?ReturnUrl=/Something
로그인 양식의 작업 속성 (숨김 입력 또는 URL의 일부로서 하나를) 같은 ReturnUrl 매개 변수를 가져야한다
<form action="Login?ReturnUrl=<%=Html.AttributeEncode(Request.QueryString["ReturnUrl"]) %>"></form>
또는
<form><input type="hidden" name="ReturnUrl" id="ReturnUrl" value="<%=Html.AttributeEncode(Request.QueryString["ReturnUrl"])"%> /></form>
2
나는 그 결과를 달성하기 위해 무엇을했는지 모르겠으며, 다른 방법도보고 싶습니다. 그러나 여기에 내 코드가있다.
문맥을 모의하기 위해 Moq을 사용하고 있습니다 ... 그리고 아직 쿼리 문자열을 사용하지 않았습니다 (내 경로에는 쿼리 문자열이 포함되어 있지 않습니다). 나는, 그것은 어쩌면 조금 overcomplicated : 경우
0
당신은 항상 참조 URL 도메인 그들은에서 오는 될 수 있다는 그럴듯한 문자열 내에 있는지 확인해야합니다. 그렇지 않으면 플래시 나 다른 클라이언트 측 기술과 함께 응답 분할 또는 알려진 공격과 알려지지 않은 공격을 수행 할 가능성이 있습니다.
HTTP 리퍼러는 사용자 입력이며 다른 것과 마찬가지로 유효성을 검사해야합니다.
관련 문제
- 1. 편집 페이지에서 다른 참조 페이지로 돌아 가기
- 2. 다른 페이지로 돌아 가기
- 3. 이전 페이지로 돌아 가기
- 4. DataPager가 첫 페이지로 돌아 가기
- 5. ASHX에서 웹 페이지로 돌아 가기
- 6. 개찰구, 이전 페이지로 돌아 가기
- 7. ASP : 헤드리스 페이지로 리디렉션하여 돌아 가기
- 8. 404 페이지로 돌아 가기 200 ok
- 9. tababrController 첫 페이지로 돌아 가기 문제 아이폰
- 10. Asp.Net MVC 입력란에 오류가있는 페이지로 돌아 가기
- 11. 로그인 후 이전 페이지로 돌아 가기
- 12. asp 스크립트를 실행하고 원래 페이지로 돌아 가기
- 13. 페이지 새로 고침 이전 페이지로 돌아 가기
- 14. 스트럿츠. 작업 후 동일한 페이지로 돌아 가기
- 15. gridview를 업데이트하고 이전 페이지로 돌아 가기
- 16. ActionResult 호출 한 페이지로 돌아 가기
- 17. Struts 2 : 호출 페이지로 돌아 가기
- 18. 장고 관리자가 저장 후 페이지로 돌아 가기
- 19. Joomla 로그인 리디렉션 페이지로 돌아 가기 이전 페이지로
- 20. "돌아 가기"
- 21. PayPal 돌아 가기 URL
- 22. 해당 페이지에서 변경하지 않고 상위 페이지로 돌아 가기
- 23. dataTable/dataScroller를 다시 작성하여 결과 페이지 첫 페이지로 돌아 가기
- 24. 검색 기준을 잃지 않고 검색 페이지로 돌아 가기
- 25. jquery 모바일 대화 상자 닫기 빈 페이지로 돌아 가기
- 26. 리조트가없는 전체 텍스트 검색 결과 페이지로 돌아 가기?
- 27. 스트럿츠 2 : 리디렉션? 페이지에서 다른 페이지로 다시 돌아 가기
- 28. Firefox 6 무한 페이지 새로 고침 해시가있는 페이지로 돌아 가기
- 29. UrlReferrer를 사용하여 영역 내 호출 페이지로 돌아 가기
- 30. 긴 Wordpress 첫 페이지로 돌아 가기 -> "양식을 다시 보내시겠습니까?"
추가 의견으로, 위의 코드를 사용하여 일부 routedata 값을 수정하십시오. – Casper