【问题标题】:Check ReturnUrl is valid before redirecting在重定向之前检查 ReturnUrl 是否有效
【发布时间】: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


    【解决方案1】:

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

    正如您正确指出的那样,检查了域,因此除了加密您的身份验证 cookie 并确保您使用 https 我认为阻止无效 ReturnURL 的唯一方法就是忽略它并重定向所有登录到您网站的主页或顶层,然后让用户通过菜单导航回来。一个很好的例子就是登录 hotmail 时。

    【讨论】:

    • 关于 returnURL 的好文章,但我正在寻找验证它的建议。
    • 嗯。也许只是为允许的字符的白名单创建一个 RegEx 表达式并通过它运行 returnURL 值?这是允许的 HTML 字符的类似问题的帖子:stackoverflow.com/questions/307013/…
    • 我正在寻找是否有任何 URL 清理器的良好工作示例,RegEx 可能是正确的方法。
    • 我不是 RegEx 大师,但这看起来很可能:stackoverflow.com/questions/161738/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多