【问题标题】:Could ASP.NET MVC prevent Open Redirect security issueASP.NET MVC 能否防止 Open Redirect 安全问题
【发布时间】:2017-11-19 10:50:04
【问题描述】:

我读到有人 asp.net mvc 代码为:

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

我担心上面的代码会导致 Open Redirect 安全问题,因为“url”来自用户的输入,永远不会被过滤/保护....

所以网址可能是一些“www.hackersite.com”,这很危险......

但是有人告诉我,asp.net mvc 框架可以通过 asp.net mvc 框架解决这个问题。我不知道该怎么做......?

【问题讨论】:

  • 编码无济于事。您想阻止用户重定向到另一个网站吗?
  • @StephenMuecke 我想阻止用户重定向到外部站点
  • MVC(版本 3+)已经内置了这个。你可以使用 UrlHelper.IsLocalUrl() 来检查它是否是一个本地 url

标签: c# asp.net asp.net-mvc security asp.net-mvc-4


【解决方案1】:

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

  1. 如果您应该将用户重定向为流程的一部分。 (如后面 成功登录重定向到 Home.aspx)。
  2. 如果网站上有用户可以更改并单击的链接(如在 Facebook 帖子中,有人发布了指向某个外部网站的链接)。

在这两种情况下,缓解措施可能不同。

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

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

对于案例 #2:

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

您可以在这里找到更多信息:https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2020-01-19
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2020-10-28
    相关资源
    最近更新 更多