2017-11-19 9 views
0
내가 누군가로 MVC 코드를 ASP.NET 읽어

:수 ASP.NET MVC 방지 열기 리디렉션 보안 문제

[HttpGet] 
public ActionResult Move(string url) 
{ 
    return Redirect(HttpUtility.UrlEnocode(url)); 
} 

은 "URL"이 때문에 나는 위의 코드를 열기 리디렉션 보안 문제가 발생할 수 두렵다 사용자의 입력에서 결코는 ...

그래서 URL이 일부는 "www.hackersite.com", 즉 위험 할 것이다 될 수있다 .... 보호/

필터링 그러나 누군가가 나에게 그 asp.net 말했다 수 mvc 프레임 워크는 asp.net mvc 프레임 워크를 통해 문제를 방지 할 수 있습니다. 어떻게해야할지 모르겠다 .... ....?

+0

인코딩은 도움이되지 않습니다. 사용자가 다른 사이트로 리디렉션하지 못하도록 하시겠습니까? –

+0

@StephenMuecke 사용자가 외부 사이트로 리디렉션하지 못하도록하고 싶습니다. – allencharp

+5

MVC (버전 3 이상)에 이미이 기능이 내장되어 있습니다. [UrlHelper.IsLocalUrl()] (https://msdn.microsoft.com/en-kr/) us/library/system.web.mvc.urlhelper.islocalurl (v = 118) .aspx) 로컬 URL이 있는지 확인하십시오 –

답변

1

정확히 어떤 기술을 사용하는지는 중요하지 않습니다. 오픈 리디렉션을 방지하려면 OWASP 가이드 라인을 따라야합니다. 일반적으로 사이트 리디렉션에는 두 가지 경우가 있습니다. 사용자를 프로세스의 일부로 리디렉션해야하는 경우

  1. 이 있습니다. ( 에서와 마찬가지로 Home.aspx 로의 성공적인 로그인 리디렉션).
  2. 사용자가 변경하고 클릭 할 수있는 링크가 웹 사이트에있는 경우 (누군가 외부 웹 사이트 링크를 게시 한 페이스 북 게시물에서와 같이).

두 경우 모두 완화 조치가 다를 수 있습니다.

사례 # 1의 경우 : URL이 LocalUrl 일명인지 확인해야합니다. 같은 웹 앱의 도메인에 있습니다. 그렇지 않으면 집을 다른 페이지 (예 : 색인)로 리디렉션합니다. 사례 # 2의

if (Url.IsLocalUrl(returnPath)) 
    return Redirect(returnUrl); 
else 
    return RedirectToAction("Index", "Home"); 

:

당신은 URL 지역인지 아닌지 먼저 확인해야 할 수 있습니다. 그렇지 않은 경우 사용자를 웹 페이지로 리디렉션하고 다른 도메인으로 리디렉션된다는 확인을 요청해야합니다.

당신은 여기에 더 많은 정보를 찾을 수 있습니다 https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet