2011-07-28 2 views
5

현재 페이지에서 쿼리 인수를 뺀 것을 다시 리디렉션해야합니다.Response.Redirect (Request.Url.AbsolutePath)가 항상 안전합니까?

나는 단지 Response.Redirect()에게 전달할 티켓을 제공하는 것처럼 보이는 Request.Url.AbsolutePath을 찾았습니다.

내 컴퓨터에서 잘 작동하는 것 같습니다. 누구든지이 속성의 가치로 방향을 바꿀 수있는 잠재적 인 문제를 알고 있습니까? 그것은 모든 경우에 "안전하다"는 것을 확인하는 것은 어렵습니다.

답변

2

그것은 문제가 될 수는 내부적으로 URL을 "다시 작성"합니다. 예를 들어 사용자가 "/team.aspx"를 요청했지만 내부적으로 실행을 전송하거나 "/page.aspx?id=137"로 URL을 다시 작성합니다.

필자는 개인적으로 Request.RawUrl (항상 로컬 임)을 사용하고 쿼리 문자열을 제거 할 수 있습니다.

HTTP 리다이렉트가 절대 경로상의 경로 ("/ foo/bar")가 될 수 있고 브라우저가 프로토콜, 포트 및 호스트 이름을 보존하기 때문에 요청의 호스트 부분을 제거하는 것은 문제가되지 않습니다.

+0

첫 번째 단락을 여러 번 읽었지만 여전히 이해가되지 않습니다. 사용자가'/ team.aspx'를 요청하면'Request.Url.AbsolutePath'가'/ team.aspx'를 리턴 할 것으로 기대합니다. '/page.aspx? id = 137'은 어디에서 왔습니까? –

+0

@Marcelo -하지만 그는 URL을 다시 쓰지 않습니다. – JonH

+0

Jonathan, URL의 임의의 형식을 다시 쓰면 AbsolutePath의 URL이 RawUrl의 URL과 다릅니다. RawUrl은 HTTP 요청을 통해 전송 된 것으로 사용자가 브라우저에서 보는 것입니다. –

0

나는 Request.Url.OriginalString을 사용할 것입니다.

절대 경로는 URL의 호스트 부분을 제거합니다.

이것 좀 봐 : http://wdevs.blogspot.com/2009/03/url-properties-of-request-to-aspnet.html

+0

그러나 'OriginalString'에는 쿼리 문자열이 포함됩니다. 나는 그것을 제거 할 수 있지만,'Request.Url.AbsolutePath'로 리다이렉트하는 것은 무엇이 잘못된 것인가? 동일한 도메인으로 리디렉션되는 동안 문제를 이해할 수 있는지 잘 모르겠습니다. –

+0

@JOnathan Wood - 귀하의 게시물을 잘못 읽으 셨습니다. 당신 말이 맞습니다.하려는 일에 아무런 문제가 없습니다. 실제 쿼리 매개 변수를 사용하지 않으려면'Request.Url.AbsolutePath'를 사용하십시오. – JonH

관련 문제