2010-01-19 65 views
5

在ASP.Net中,如果傳入特定的查詢字符串參數,是否有人知道繞過表單身份驗證的方法?傳遞查詢字符串時繞過表單身份驗證

如:

mydomain.com/myprotectedpage.aspx 

...我想通過表單驗證來保護(因此,重定向到登錄頁面)

mydomain.com/myprotectedpage.aspx?myBypassParameter=me 

...我想頁面正常渲染

這是否可能?

+0

可能的重複:http://stackoverflow.com/questions/1991242/logging-users-in-automatically-via-an-url – Greg 2010-01-26 17:36:23

回答

3

沒有真正的「官方」做法。

你可以做我想做的,是有一個基本頁面,而不是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 

末級

+0

謝謝,我希望有一些神奇的解決方案,但這可能會是最好的選擇。 – Paul 2010-01-19 19:30:54

0

在後面的代碼,你可以簡單地使用Request.QueryString["myBypassParameter"]並檢查其值。如果該值無效,請使用FormsAuthentication.RedirectToLoginPage或自定義重定向將用戶返回到登錄頁面。 但是,這似乎不是一種保護頁面的安全方法。如果某人獲得了特定參數並設法訪問受保護的頁面,該怎麼辦?此外,您要確保QueryString值有效(可能是通過正則表達式)以確保用戶未傳遞惡意代碼,然後您的應用程序將讀取該代碼。

+0

你說得對,你的回答看起來不太安全。 – 2010-01-19 19:05:33

+0

難道這是downvote的原因嗎?爲了解釋它是如何完成的,但推薦反對? – keyboardP 2010-01-19 19:06:53

+1

儘管如此,仍然不能真正錯誤。不安全性在於請求,而不是解決方案。 – 2010-01-19 19:07:26

0

您可能會將一些快速代碼堵塞到Application_AuthenticateRequest事件中。然後您可以測試該參數並根據需要調整User.Identity以允許該頁面。您還必須進行頁面檢查,以確保它不允許在所有受限制的頁面上出現此行爲。

雖然我不推薦這種設計作爲一種方法。如果您需要以匿名方式訪問受保護區域,最好將所有功能放入UserControl中,然後使用受保護/不受保護的父頁面版本。這將允許你控制什麼時候出去。