在ASP.Net中,如果傳入特定的查詢字符串參數,是否有人知道繞過表單身份驗證的方法?傳遞查詢字符串時繞過表單身份驗證
如:
mydomain.com/myprotectedpage.aspx
...我想通過表單驗證來保護(因此,重定向到登錄頁面)
mydomain.com/myprotectedpage.aspx?myBypassParameter=me
...我想頁面正常渲染
這是否可能?
在ASP.Net中,如果傳入特定的查詢字符串參數,是否有人知道繞過表單身份驗證的方法?傳遞查詢字符串時繞過表單身份驗證
如:
mydomain.com/myprotectedpage.aspx
...我想通過表單驗證來保護(因此,重定向到登錄頁面)
mydomain.com/myprotectedpage.aspx?myBypassParameter=me
...我想頁面正常渲染
這是否可能?
沒有真正的「官方」做法。
你可以做我想做的,是有一個基本頁面,而不是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
末級
謝謝,我希望有一些神奇的解決方案,但這可能會是最好的選擇。 – Paul 2010-01-19 19:30:54
在後面的代碼,你可以簡單地使用Request.QueryString["myBypassParameter"]
並檢查其值。如果該值無效,請使用FormsAuthentication.RedirectToLoginPage
或自定義重定向將用戶返回到登錄頁面。 但是,這似乎不是一種保護頁面的安全方法。如果某人獲得了特定參數並設法訪問受保護的頁面,該怎麼辦?此外,您要確保QueryString值有效(可能是通過正則表達式)以確保用戶未傳遞惡意代碼,然後您的應用程序將讀取該代碼。
你說得對,你的回答看起來不太安全。 – 2010-01-19 19:05:33
難道這是downvote的原因嗎?爲了解釋它是如何完成的,但推薦反對? – keyboardP 2010-01-19 19:06:53
儘管如此,仍然不能真正錯誤。不安全性在於請求,而不是解決方案。 – 2010-01-19 19:07:26
您可能會將一些快速代碼堵塞到Application_AuthenticateRequest事件中。然後您可以測試該參數並根據需要調整User.Identity以允許該頁面。您還必須進行頁面檢查,以確保它不允許在所有受限制的頁面上出現此行爲。
雖然我不推薦這種設計作爲一種方法。如果您需要以匿名方式訪問受保護區域,最好將所有功能放入UserControl中,然後使用受保護/不受保護的父頁面版本。這將允許你控制什麼時候出去。
可能的重複:http://stackoverflow.com/questions/1991242/logging-users-in-automatically-via-an-url – Greg 2010-01-26 17:36:23