ASP.NET的模擬應用程式

iDotNetSpace發表於2009-07-31

ASP.NET 應用程式可以選擇以這些應用程式當前正為之操作的客戶的身份執行。通常這樣做的原因是為了避免在 ASP.NET 應用程式程式碼中處理身份驗證和授權問題。而您依賴於 Microsoft Internet 資訊服務 (IIS) 來驗證使用者,然後將已通過驗證的標記傳遞給 ASP.NET 應用程式;或者,如果無法驗證使用者,則傳遞未經身份驗證的標記。不論何種情況,如果啟用了“模擬”,則 ASP.NET 應用程式會模擬所收到的任何標記。當前模擬客戶的 ASP.NET 應用程式依賴於 NTFS 目錄和檔案中的設定來允許客戶獲得訪問許可權或拒絕其訪問。務必將伺服器檔案空間格式化為 NTFS,以便可以設定訪問許可權。

預設情況下禁用模擬。為了 ASP 的相容性,使用者必須顯式啟用模擬。如果為給定的應用程式啟用模擬,則 ASP.NET 總是模擬 IIS 提供給 ISAPI 擴充套件的訪問標記。該標記既可以是已驗證使用者標記,也可以是匿名使用者的標記(如 IUSR_MACHINENAME)。不論應用程式中使用哪種身份驗證型別,模擬都會發生。

只能模擬應用程式程式碼,編譯和配置作為程式標記讀取。編譯的結果放在“Temporary ASP.NET files”目錄中。所模擬的帳戶需要對該目錄的讀/寫訪問權。如果應用程式位於通用命名規則 (UNC) 共享上,除非使用配置帳戶,否則,ASP.NET 將總是模擬提供給 IIS 的標記來訪問該共享。如果提供了顯式配置的帳戶,ASP.NET 將使用該帳戶取代 IIS UNC 標記。確實需要基於每個請求的模擬應用程式可以直接配置為模擬提交請求的使用者。

預設情況下,在計算機級別上禁用模擬。而且除非被重寫,否則所有的應用程式域都繼承此設定。可以通過將配置檔案放置在應用程式根目錄下來啟用模擬。有關 ASP.NET 配置系統的更多資訊,請參見 ASP.NET 配置。

與其他配置指令的情況相同,此指令分層應用。除非被顯式重寫,否則,層次結構中的巢狀程式將遵從它。此設定的預設值如下所示。

  1. <impersonation enable="false"/> 

為應用程式啟用模擬的最小配置檔案可能看上去和下面的示例類似。

  1. <!-- Web.config file. --&gt 
  2. <identity impersonate="true"/> 

還有以可配置身份執行應用程式的名稱支援。例如:

  1. <identity impersonate="true" userName="contoso\Jane" password="pass"/> 

這將允許整個應用程式以 contoso\Jane 執行,不論請求的身份如何,只要密碼正確即可。可以將這種型別的模擬委託給另一臺計算機。

您可以以程式設計的方式讀取被模擬使用者的標識,如下例所示。

  1. [Visual Basic]  
  2. Dim username As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name  
  3.  
  4. [C#]  
  5. String username = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

在上例中,userName 和 password 以明文形式儲存在配置檔案中。雖然 IIS 不傳輸 .config 檔案來響應使用者代理請求,但是可以通過其他途徑讀取配置檔案,例如通過在包含伺服器的域上具有適當憑據的已經過身份驗證的使用者。為了增強安全性,標識部分支援在登錄檔中儲存加密的 userName 和 password 屬性,如下例所示。

  1. userName="registry:HKLM\Software\AspNetIdentity,Name" 
  2. password="registry:HKLM\Software\AspNetIdentity,Password" 

字串中位於關鍵字 registry 之後和逗號之前的部分表示 ASP.NET 開啟的登錄檔項的名稱。逗號之後的部分包含一個字串值的名稱,ASP.NET 從此名稱中讀取憑據。必須有逗號,並且憑據必須儲存在 HKLM 配置單元中。如果配置格式不正確,則 ASP.NET 不會啟動輔助程式,然後將顯示造成當前帳戶建立失敗的程式碼路徑。

憑據必須為 REG_BINARY 格式,並且包含 Windows API 函式 CryptProtectData 呼叫的輸出。可以用 ASP.NET 設定登錄檔控制檯應用程式 (Aspnet_setreg.exe) 來建立加密憑據並將它們儲存在登錄檔中。該應用程式使用 CryptProtectData 完成加密。若要同 Visual C++ 原始碼和文件一起下載 Aspnet_setreg.exe,請訪問 Web 站點 www.asp.net並搜尋“aspnet_setreg”。

應該對儲存加密憑據的金鑰的訪問許可權進行配置,僅向 Administrators 和 SYSTEM 提供訪問權。由於金鑰會被作為 SYSTEM 執行的 ASP.NET 程式讀取,因此應設定以下許可權:

Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
這可以提供兩道保護資料的防線:

ACL 許可權要求訪問資料的身份是 Administrator。
攻擊者必須在伺服器上執行程式碼 (CryptUnprotectData) 才能恢復帳戶的憑據。以上介紹ASP.NET的模擬應用程式

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610960/,如需轉載,請註明出處,否則將追究法律責任。

相關文章