簡體   English   中英

以編程方式確定路徑是否受限制

[英]Programmatically determine if path is restricted

我在ASP.NET 2中創建一個HttpModule。模塊需要根據請求的路徑是公共路徑還是受保護路徑執行不同的邏輯。 web.config使用<system.web><authorization>標記和幾個<location>標記設置授權。

有沒有辦法讓HttpModule判斷出當前請求的路徑是否受到保護? 我不想硬編碼代碼中的值。

如果您使用標准authentication/authorization則可以使用CheckUrlAccessForPrincipal

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);

沒有直接的方法來查看文件系統條目並獲得它的有效權限。 計算文件或目錄上的有效權限集是......復雜的(這將是一種禮貌的方式)。

看起來這將是System.IO類應該提供的相當明顯的信息,但顯然CLR團隊並不這么認為。 我認為問題的一部分是固有的競爭條件。 給定對象的權限是動態的,可以隨時改變。 它們甚至可以在您的權限檢查和對象的實際訪問之間進行更改,從而導致異常被引發。

這些問題有一些幫助:

最簡單的方法是要求你想要的權限,如果你沒有它們就捕獲異常並使用它來返回bool是/否值:

// you'll need access to the namespace namespace System.Security.Permissions
public bool HasAccess( string path , FileIOPermissionAccess accessDesired )
{
  bool isGranted ;

  try
  {
    FileIOPermission permission = new FileIOPermission( accessDesired , path ) ;

    permission.Demand() ;

    isGranted = true ;

  }
  catch
  {
    isGranted = false ;
  }

  return isGranted ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM