ASP.NET的模擬應用程序
ASP.NET 應用程序可以選擇以這些應用程序當前正為之操作的客戶的身份執(zhí)行。通常這樣做的原因是為了避免在 ASP.NET 應用程序代碼中處理身份驗證和授權問題。而您依賴于 Microsoft Internet 信息服務 (IIS) 來驗證用戶,然后將已通過驗證的標記傳遞給 ASP.NET 應用程序;或者,如果無法驗證用戶,則傳遞未經(jīng)身份驗證的標記。不論何種情況,如果啟用了“模擬”,則 ASP.NET 應用程序會模擬所收到的任何標記。當前模擬客戶的 ASP.NET 應用程序依賴于 NTFS 目錄和文件中的設置來允許客戶獲得訪問權限或拒絕其訪問。務必將服務器文件空間格式化為 NTFS,以便可以設置訪問權限。
默認情況下禁用模擬。為了 ASP 的兼容性,用戶必須顯式啟用模擬。如果為給定的應用程序啟用模擬,則 ASP.NET 總是模擬 IIS 提供給 ISAPI 擴展的訪問標記。該標記既可以是已驗證用戶標記,也可以是匿名用戶的標記(如 IUSR_MACHINENAME)。不論應用程序中使用哪種身份驗證類型,模擬都會發(fā)生。
只能模擬應用程序代碼,編譯和配置作為進程標記讀取。編譯的結(jié)果放在“Temporary ASP.NET files”目錄中。所模擬的帳戶需要對該目錄的讀/寫訪問權。如果應用程序位于通用命名規(guī)則 (UNC) 共享上,除非使用配置帳戶,否則,ASP.NET 將總是模擬提供給 IIS 的標記來訪問該共享。如果提供了顯式配置的帳戶,ASP.NET 將使用該帳戶取代 IIS UNC 標記。確實需要基于每個請求的模擬應用程序可以直接配置為模擬提交請求的用戶。
默認情況下,在計算機級別上禁用模擬。而且除非被重寫,否則所有的應用程序域都繼承此設置??梢酝ㄟ^將配置文件放置在應用程序根目錄下來啟用模擬。有關 ASP.NET 配置系統(tǒng)的更多信息,請參見 ASP.NET 配置。
與其他配置指令的情況相同,此指令分層應用。除非被顯式重寫,否則,層次結(jié)構中的嵌套程序?qū)⒆駨乃4嗽O置的默認值如下所示。
- <impersonation enable="false"/>
為應用程序啟用模擬的最小配置文件可能看上去和下面的示例類似。
- <!-- Web.config file. -->
- <identity impersonate="true"/>
還有以可配置身份運行應用程序的名稱支持。例如:
- <identity impersonate="true" userName="contoso\Jane" password="pass"/>
這將允許整個應用程序以 contoso\Jane 運行,不論請求的身份如何,只要密碼正確即可。可以將這種類型的模擬委托給另一臺計算機。
您可以以編程的方式讀取被模擬用戶的標識,如下例所示。
- [Visual Basic]
- Dim username As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name
- [C#]
- String username = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
在上例中,userName 和 password 以明文形式存儲在配置文件中。雖然 IIS 不傳輸 .config 文件來響應用戶代理請求,但是可以通過其他途徑讀取配置文件,例如通過在包含服務器的域上具有適當憑據(jù)的已經(jīng)過身份驗證的用戶。為了增強安全性,標識部分支持在注冊表中存儲加密的 userName 和 password 屬性,如下例所示。
- userName="registry:HKLM\Software\AspNetIdentity,Name"
- password="registry:HKLM\Software\AspNetIdentity,Password"
字符串中位于關鍵字 registry 之后和逗號之前的部分表示 ASP.NET 打開的注冊表項的名稱。逗號之后的部分包含一個字符串值的名稱,ASP.NET 從此名稱中讀取憑據(jù)。必須有逗號,并且憑據(jù)必須存儲在 HKLM 配置單元中。如果配置格式不正確,則 ASP.NET 不會啟動輔助進程,然后將顯示造成當前帳戶創(chuàng)建失敗的代碼路徑。
憑據(jù)必須為 REG_BINARY 格式,并且包含 Windows API 函數(shù) CryptProtectData 調(diào)用的輸出??梢杂?ASP.NET 設置注冊表控制臺應用程序 (Aspnet_setreg.exe) 來創(chuàng)建加密憑據(jù)并將它們存儲在注冊表中。該應用程序使用 CryptProtectData 完成加密。若要同 Visual C++ 源代碼和文檔一起下載 Aspnet_setreg.exe,請訪問 Web 站點 www.asp.net并搜索“aspnet_setreg”。
應該對存儲加密憑據(jù)的密鑰的訪問權限進行配置,僅向 Administrators 和 SYSTEM 提供訪問權。由于密鑰會被作為 SYSTEM 運行的 ASP.NET 進程讀取,因此應設置以下權限:
Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
這可以提供兩道保護數(shù)據(jù)的防線:
ACL 權限要求訪問數(shù)據(jù)的身份是 Administrator。
攻擊者必須在服務器上運行代碼 (CryptUnprotectData) 才能恢復帳戶的憑據(jù)。以上介紹ASP.NET的模擬應用程序
【編輯推薦】