【问题标题】:Why Url.IsLocalUrl is false for local URLs in ASP.NET MVC?为什么 ASP.NET MVC 中的本地 URL 的 Url.IsLocalUrl 为 false?
【发布时间】:2016-04-15 08:43:52
【问题描述】:

使命:

ASP.NET MVC 5 应用程序中防止open redirection

故事:

用户在网站/的某个网页上,说概览页面/Home/Overview并点击登录

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

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

价值观

  • _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.IsLocalUrl 的值为 false,逻辑错误。

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

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

【问题讨论】:

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


【解决方案1】:

Url.IsLocalUrl("/Home/Overview") 绝对是true。你得到false,因为它正在评估Url.IsLocalUrl("%2fHome%2fOverview")。也就是说,你returnUrl 被url 编码了两次。试着找出你有不必要的编码的地方。

【讨论】:

  • 我可能没有进行任何双 URL 编码。顺便说一句,我一定会检查我的代码。谢谢!!顺便说一句,我正在阅读@karthiksubramaniam 引用的posts
  • 不确定双重编码在哪里。无法使用它检查 url 是否是本地的,我很想看一个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2018-02-16
  • 1970-01-01
相关资源
最近更新 更多