传递查询字符串时绕过表单身份验证

时间:2010-01-19 18:49:25

标签: asp.net forms-authentication

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

如:

mydomain.com/myprotectedpage.aspx

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

mydomain.com/myprotectedpage.aspx?myBypassParameter=me

...我希望该网页正常呈现

这一切都可能吗?

3 个答案:

答案 0 :(得分:2)

实际上没有任何“官方”方式。

你可以做我做的事,有一个基页而不是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

结束班

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我不建议将此设计作为一种方法。如果您需要以匿名方式访问受保护区域,最好将所有功能放入UserControl,然后使用受保护/不受保护的父页面版本。这将允许您控制发生的事情和时间。