C# ASP.NET MVC能否防止打开重定向安全问题

C# ASP.NET MVC能否防止打开重定向安全问题,c#,asp.net,asp.net-mvc,security,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Security,Asp.net Mvc 4,我将asp.net mvc代码解读为: [HttpGet] public ActionResult Move(string url) { return Redirect(HttpUtility.UrlEnocode(url)); } 我担心上面的代码可能会导致开放重定向安全问题,因为“url”来自用户的输入,永远不会被过滤/保护 所以url可能是一些“www.hackersite.com”,这将是危险的 但是有人告诉我,asp.NETMVC框架可以通过asp.NETMVC框架防止这个问

我将asp.net mvc代码解读为:

[HttpGet]
public ActionResult Move(string url)
{
    return Redirect(HttpUtility.UrlEnocode(url));
}
我担心上面的代码可能会导致开放重定向安全问题,因为“url”来自用户的输入,永远不会被过滤/保护

所以url可能是一些“www.hackersite.com”,这将是危险的


但是有人告诉我,asp.NETMVC框架可以通过asp.NETMVC框架防止这个问题。我不知道如何做到这一点……?

你到底在使用哪种技术并不重要。为了防止打开重定向,您只需遵循OWASP指南即可。 站点重定向通常有两种不同的情况:

  • 如果您应该将用户重定向为流程的一部分。(如在后面) 成功登录(重定向到Home.aspx)
  • 如果网站上有链接,用户可以更改并点击(比如在facebook的帖子中,有人发布了指向某个外部网站的链接)
  • 在这两种情况下,缓解措施可能有所不同

    对于案例1: 您必须确保Url是LocalUrl。在同一web应用程序的域中。否则,将主页重定向到另一个页面,例如:您的索引

    if (Url.IsLocalUrl(returnPath))
        return Redirect(returnPath);
    else
        return RedirectToAction("Index", "Home"); 
    
    对于案例2:

    您可能需要首先检查URL是否为本地URL。如果不是,你必须将用户重定向到一个网页,并要求他确认他将被重定向到另一个域


    您可以在此处找到更多信息:

    编码没有帮助。你想阻止用户重定向到其他站点吗?@StephenMuecke我想阻止用户重定向到外部站点MVC(版本3+)已经内置了此功能。您可以使用检查其是否为本地url