【问题标题】:Bypassing forms authentication when a query string is passed传递查询字符串时绕过表单身份验证
【发布时间】:2010-01-19 18:49:24
【问题描述】:

在 ASP.Net 中,如果传入特定的查询字符串参数,是否有人知道绕过表单身份验证的方法?

如:

mydomain.com/myprotectedpage.aspx

...我希望受到表单身份验证的保护(因此,重定向到登录页面)

mydomain.com/myprotectedpage.aspx?myBypassParameter=me

...我希望页面正常呈现

这可能吗?

【问题讨论】:

标签: asp.net forms-authentication


【解决方案1】:

并不是真正的“官方”方式。

你可以像我一样做,有一个基本页面而不是 system.web.ui.page 像这样:

Public MustInherit Class ProtectedPage
Inherits System.Web.UI.Page

Private Sub Page_InitComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.InitComplete
    If User.Identity.IsAuthenticated = False Then
        If String.IsNullOrEmpty(Request.QueryString("myBypassParameter")) Then
            FormsAuthentication.RedirectToLoginPage()
        End If
    End If
End Sub

结束类

【讨论】:

  • 谢谢,我希望有一些神奇的解决方案,但这可能是最好的选择。
【解决方案2】:

在您后面的代码中,您可以简单地使用Request.QueryString["myBypassParameter"] 并检查它的值。如果它是无效值,则使用FormsAuthentication.RedirectToLoginPage 或自定义重定向将用户放回登录页面。 然而,这似乎不是保护页面的安全方法。如果有人掌握了特定参数并设法访问您的受保护页面怎么办?此外,您要确保 QueryString 值有效(可能通过正则表达式),以确保用户没有传递恶意代码,然后您的应用程序将读取这些代码。

【讨论】:

  • 这是否决票的原因吗?用于解释它是如何完成的,但建议不要这样做?
  • 虽然不能真正对响应产生错误。不安全感在于请求,而不是解决方案。
【解决方案3】:

您也许可以在 Application_AuthenticateRequest 事件中插入一些快速代码。然后,您可以测试参数并根据需要调整 User.Identity 以允许该页面。您还必须进行页面检查,以确保它不允许在所有受限页面上出现这种行为。

我不推荐这种设计作为一种方法。如果您需要以匿名方式访问受保护区域,最好将所有功能放入 UserControl 中,然后使用父页面的受保护/不受保护版本。这将允许您控制什么时候出去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2016-03-19
    • 2016-12-25
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多