我正在使用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值的其他建议吗?
答案 0 :(得分:2)
这篇文章解释了ReturnURL的解剖学 http://blogs.msdn.com/vijaysk/archive/2008/01/24/anatomy-of-forms-authentication-return-url.aspx
正如您所说,域名已经过检查,因此加密您的身份验证Cookie并确保您使用https我认为您唯一可以做的就是忽略它,并重定向所有登录到您网站的主页或顶级网站,然后让用户通过菜单返回。一个很好的例子就是你登录hotmail。