2

我是一個關於Asp.NET會員功能的使用新手,我想知道這可能是一個很好的做法使用這樣的代碼來否定整個頁面的訪問:上的PrincipalPermission pageLoad的

public partial class AdminPage : Page 
{ 
    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     ... 
    } 
} 

我懷疑這不是一種很好的做事方式,但我想知道爲什麼!

謝謝。

回答

0

我想你會需要您的所有頁面的基類,例如:

public abstract class BasePage : Page 
{ 
    // Note: 
    // 1. check on init, not on load 
    // 2. override protected method, not handle event 
    protected override OnInit(EventArgs e) 
    { 
     // check permissions here 
    } 
} 
1

小point--把屬性的類。這會導致頁面一找到適當的權限就立即引發安全異常。爲防止用戶查看此頁面,請在顯示URL之前檢查其憑據。該類的屬性是強有力的保證,即普通用戶不會像該類中的一行代碼那樣運行。

是的,這是由於這些原因的好方法:

當線程原理和HttpContext的User對象設置,用合適的IPrincipal和IIdentity的屬性起作用。 (所有這些都將發生在全局asax中的請求身份驗證事件中)這些接口由Microsoft定義,並在任何上下文中都有記錄,並可在任何MS操作系統上運行的任何應用程序中使用。因此,在開始閱讀您的代碼之前,您從街上搶手的任何半個合格的開發人員都可能熟悉這一點。此外,由於Thread的IPrincipal和IIdentity被Microsoft使用(它可能是任何擁有龐大用戶羣的大公司),它是經過戰鬥測試的代碼。你仍然可以做一些愚蠢的事情,但現有的模式可以幫助你陷入成功的陷阱。另一方面,如果您要將自定義對象放入會話,魔術cookie或其他標記中,則維護開發人員必須從頭開始學習它是如何工作的,然後檢查它是否存在可利用的漏洞。