在重定向之前检查ReturnUrl是否有效

时间:2010-02-19 23:40:50

标签: asp.net asp.net-membership

我正在使用ASP.NET成员资格和表单身份验证,在重定向到returnURL之前我想验证它。对于那些不熟悉工作流程的人来说,基本上如果您请求一个要求您通过身份验证的页面,您将被重定向到登录页面。在URL字符串中,您将看到一个名为returnURL的参数,例如 http://example.com/login.aspx?ReturnUrl=%2fprotected%2fdefault.aspx

无论是在Response.Redirect(returnURL)等重定向中使用它还是通过FormsAuthentication.RedirectFromLoginPage方法间接使用它,它都会在不验证returnURL的情况下通过。 FormsAuthentication.RedirectFromLoginPage确实有一个安全检查,它没有离开域,但仍然没有阻止某人输入足够的随机字符来导致错误。

我尝试使用System.IO.File.Exists(Server.MapPath(returnURL)),但是如果给出足够的非法字符,则会导致Server.MapPath出错。

注意:URLEncoding不起作用,因为我们不是清理参数,而是清除主URL。

有关验证或清除returnURL值的其他建议吗?

1 个答案:

答案 0 :(得分:2)

这篇文章解释了ReturnURL的解剖学 http://blogs.msdn.com/vijaysk/archive/2008/01/24/anatomy-of-forms-authentication-return-url.aspx

正如您所说,域名已经过检查,因此加密您的身份验证Cookie并确保您使用https我认为您唯一可以做的就是忽略它,并重定向所有登录到您网站的主页或顶级网站,然后让用户通过菜单返回。一个很好的例子就是你登录hotmail。