【发布时间】:2011-01-19 00:17:54
【问题描述】:
我正在使用 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 值的任何其他建议?
【问题讨论】:
标签: asp.net asp.net-membership