为什么对于ASP.NET MVC中的本地URL,Url.IsLocalUrl为false?

时间:2016-01-11 05:34:19

标签: c# asp.net asp.net-mvc url-redirection owasp

团:

阻止open redirection申请中的ASP.NET MVC 5

故事:

用户位于网站/的某个网页上,说概述页面/Home/Overview并点击 login

登录后,服务器返回一些绝密用户特定数据,并重定向到用户发起登录请求的同一页面。

我需要确保服务器在登录后不会愚蠢地重定向到黑客的网站,并传递绝密用户特定数据。

的值
  • _Controller.Request.UrlReferrer
  • _Controller.Request.UrlReferrer.AbsoluteUri
  • _Controller.Request.Url.AbsoluteUri
  • _Controller.Url.IsLocalUrl(returnUrl)

分别是:

  • {https://localhost:44300/Home/Overview}
  • "https://localhost:44300/Home/Overview"
  • "https://localhost:44300/Account/Login?returnUrl=%2FHome%2FOverview"
  • false

values for redirection

Url.IsLocalUrl的值为false,这在逻辑上是错误的。

在这种情况下,如何确保用户在成功登录后安全地重定向到/Home/Overview而不是http://blackHatHackerWebsite.com

为什么对于ASP.NET MVC中的本地URL,Url.IsLocalUrl为false?

1 个答案:

答案 0 :(得分:4)

Url.IsLocalUrl("/Home/Overview")绝对是true。您得到false因为它正在评估Url.IsLocalUrl("%2fHome%2fOverview")。也就是说,您returnUrl被网址编码两次。尝试找到不必要的编码。