MVC3应用程序重定向到ReturnUrl=%2f
本文关键字:%2f ReturnUrl 应用程序 重定向 MVC3 | 更新日期: 2023-09-27 18:25:07
我在MVC3 web应用程序中使用表单身份验证。我在根web.config中添加了以下内容:
<authentication mode="Forms">
<forms name=".FormsAuth" loginUrl="~/Home/Index" timeout="2880" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
当我启动应用程序时,它会重定向到http://localhost:22888/Home/Index?ReturnUrl=%2f
,而不是http://localhost:22888
。如果我删除行<deny users="?">
,那么它会正确重定向,但登录后Context.User.Identity.Name
不会给出任何值。
请帮忙。
看看如何保护ASP.NET MVC 4应用程序和新的AllowAnonymous属性。
不能使用路由或web.config文件来保护MVC应用程序(任何版本)的安全唯一受支持的保护MVC应用程序的方法是应用Authorize属性。。。
报价
MVC使用路由,不将URL映射到WebForms、PHP和传统web服务器等物理文件位置因此,使用web.config肯定会在您的网站上打开一个安全漏洞
如果这种情况在未来发生变化,产品团队将进行沟通,但目前这毫无例外。
示例:
从默认的ASP.Net MVC项目(internet/intranet)开始。
编辑web.config添加:
<location path="Home">
<system.web>
<authoirzation>
<deny users="*">
</authoirzation>
</system.web>
</location>
运行该项目,默认情况下,您将使用default路由/Home/Index
,然后您可以看到内容,只需绕过web.config,不对默认模板进行任何更改。为什么?因为ASP.Net管道正在将请求的URL与web.config中指定的位置进行比较。但是,在管道中执行授权事件之后,将进行路由(默认路由或自定义路由),并允许访问所谓的受限区域。
此外,任何MVC Redirect()
也将绕过与在授权管道事件之后再次进行路由相同的安全措施。
当我启动我的应用程序时,它会重定向到http://:22888/Home/Index?ReturnUrl=%2f,而不是http://:22888。
如果使用默认模板,授权会存储returnUrl
并重定向回值为%2f
的/Home/Index
,即/
。如果/
,则可以更新AccountsController
中的RedirectToAction
代码以不附加returnUrl
。
这是运行时的正确行为。
您告诉引擎拒绝未经身份验证的用户访问,并且登录url位于~/Home/Index
。
这就是为什么当您导航到默认url /
时,引擎会让浏览器转到登录页面并传递返回url,在本例中编码为/
。
那么问题来了:如果正确的行为困扰着你,你想做什么。
我通过执行两个修改来解决这个问题:
- 我删除了拒绝用户="?"web.config文件中的行。但后来我在
Context.User.Identity.Name
中变为空 - 在HttpPost登录方法中,我在使用
return View("Home")
成功验证后重定向用户。当我把它改为return RedirectToAction("Home")
时,我得到了Context.User.Identity.Name
中的值
虽然节目有点晚,但如果您仍然有问题,请记住向下查看web.config中的部分,以了解其他授权规则(设置正确或不正确)。在某些情况下,对根目录或子目录中的资源的错误配置可能会导致无休止的重定向。