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

xam*_*mir 7 c# asp.net asp.net-mvc owasp url-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

重定向的值

值为Url.IsLocalUrlfalse,这在逻辑上是错误的.

在这种情况下,我如何确保用户获得安全的重定向到/Home/Overviewhttp://blackHatHackerWebsite.com成功登录后?

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

Che*_*hen 5

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