Asp.net

ASP.NET 中的安全異常和 IIS 7.5 中的載入使用者配置文件選項

  • June 25, 2013

部署新版本的 ASP.NET 2.0 應用程序後,它開始引發安全異常:“System.Security.SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=中立,PublicKeyToken=b77a5c561934e089’ 失敗。“。

在網際網路上快速研究後,我們能夠通過在 IIS 7.5 應用程序池中將“載入使用者配置文件”設置為 True 來解決這個問題。這個解決方案在stackoverflow上也多次提到:

然而,我們無法找到它必須是真的原因。我們審查了新版本中的所有更改(很高興只有少數),但沒有發現任何可疑之處(如某些文章建議的那樣,無法訪問系統資料庫或臨時數據等)。當 IIS 7.5 中託管的 ASP.NET 應用程序需要將“載入使用者配置文件”選項設置為 True 時,誰能給我們提示?

細節:

  • 應用程序池:.NET 2.0;託管管道模式 - 經典;身份 - 自定義域帳戶
  • 在 IIS 6.0 (W2K3) 中:新舊版本的應用程序工作正常
  • 在 IIS 7.5 (W2K8-R2) 中:舊版本的應用程序執行良好;新版本的應用程序引發安全異常 - 將“載入使用者配置文件”設置為 True 後開始工作

謝謝!

編輯: 我們終於找到了這個問題的原因!我們的管理員使用不同的技術將新版本的應用程序從暫存環境複製到生產環境。他使用網路伺服器作為中介。在將壓縮的發布建構工件下載到生產環境然後解壓縮文件後,它們仍被標記為“已阻止”,因為它們來自不同的電腦。另請參閱https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a然後 ASP.NET 在邏輯上以部分信任而不是完全信任的方式執行這些二進製文件,這實際上導致了我們的應用程序中提到的安全異常

將“載入使用者配置文件”設置為 True 將安全異常修復為副作用。如果“載入使用者配置文件”設置為 False,那麼我們的應用程序(不是我們的程式碼,可能是一些 .NET BCL 或外部程序集)正在嘗試查詢有關目錄“C:\Windows\System32\config\systemprofile\AppData\ Local\Microsoft\Windows\Temporary Internet Files”,其中應用程序池的身份不允許:

  • 完全信任:拒絕訪問此查詢操作不會引發任何異常
  • 部分信任:對此查詢操作的訪問被拒絕引發安全異常

如果“載入使用者配置文件”設置為 True,則每次應用程序池啟動時都會在使用者目錄中創建臨時配置文件。然後我們的應用程序嘗試查詢有關此配置文件的“臨時 Internet 文件”目錄的資訊,允許應用程序池的身份。因此,即使部分信任也不例外。

非常好的故障排除會議!:)

“載入使用者配置文件”設置可以幫助您的另一個範例是使用臨時文件。有時這種用法可能是間接的。例如,SQL Express 在某些情況下可以做到這一點。

所以我的建議。關閉“載入使用者配置文件”並檢查 %TEMP%。然後嘗試為用於應用程序池的域帳戶提供對 %TEMP% 目錄的完全訪問權限(或更改訪問權限)。可能它解決了你的問題。

另一個建議是使用 Process Monitor(參見http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)來設置將使用使用者配置文件的哪些部分(或收到“拒絕訪問”錯誤)當您收到“System.Security.SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission”異常的那一刻。

引用自:https://stackoverflow.com/questions/3068548