[BUG]ASP.NET 未被授權訪問所請求的資源。請考慮授予 ASP.NET 請求標識訪問此資源的許可權
“/”應用程式中的伺服器錯誤。
--------------------------------------------------------------------------------
對路徑“//10.6.27.8/rec/rec/20100719/170007.voc”的訪問被拒絕。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。
異常詳細資訊: System.UnauthorizedAccessException: 對路徑“//10.6.27.8/rec/rec/20100719/170007.voc”的訪問被拒絕。
ASP.NET 未被授權訪問所請求的資源。請考慮授予 ASP.NET 請求標識訪問此資源的許可權。ASP.NET 有一個在應用程式沒有模擬時使用的基程序標識(通常,在 IIS 5 上為 {MACHINE}/ASPNET,在 IIS 6 上為網路服務)。如果應用程式正在通過 <identity impersonate="true"/> 模擬,則標識將為匿名使用者(通常為 IUSR_MACHINENAME)或經過身份驗證的請求使用者。
要將 ASP.NET 訪問許可權授予某個檔案,請在資源管理器中右擊該檔案,選擇“屬性”,然後選擇“安全”選項卡。單擊“新增”新增適當的使用者或組。突出顯示 ASP.NET 帳戶,選中所需訪問許可權對應的框。
源錯誤:
行 120: return;
行 121: }
行 122: File.Copy(pathSource, pathTo_voc);
行 123: int result=DjVocConvert.PcmtoWave(pathTo_voc, pathTo_wav);
行 124: if (result > 0)
原始檔: c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs 行: 122
堆疊跟蹤:
[UnauthorizedAccessException: 對路徑“//10.6.27.8/rec/rec/20100719/170007.voc”的訪問被拒絕。]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7714255
System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite) +7628060
System.IO.File.Copy(String sourceFileName, String destFileName) +6
RecPlay_RecPlay.Do(String pathSource, String agentID) in c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs:122
RecPlay_RecPlay.BuildWav(String serviceID) in c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs:94
RecPlay_RecPlay.Page_Load(Object sender, EventArgs e) in c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs:45
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
--------------------------------------------------------------------------------
版本資訊: Microsoft .NET Framework 版本:2.0.50727.3074; ASP.NET 版本:2.0.50727.3074
///////////------------------------------以上是在Windows Server 2008 IIS 7.0
解決方案:(1)給資料夾加IUSR_MACHINENAME使用者,且賦予完全控制權:失敗
(2)給資料夾加Net_service使用者,且賦予完全控制權:失敗
(3)給資料夾加everyOne使用者,且賦予完全控制權:失敗
(4)web.config "<system.web>節新增
<identity impersonate="false" userName="" password="" />
",:OK,搞定!
MSDN參考:
要加密使用者名稱和密碼並將它們儲存在登錄檔中,請按如下方式設定 userName 和 password 屬性。
複製userName="registry:HKLM/Software/AspNetProcess,Name"password="registry:HKLM/Software/AspNetProcess,Pwd"
字串中位於關鍵字 registry 之後和逗號之前的部分表示 ASP.NET 開啟的登錄檔項的名稱。逗號之後的部分包含一個字串值的名稱,ASP.NET 將從此名稱中讀取憑據。必須有逗號,並且憑據必須儲存在 HKLM 配置單元中。如果配置格式不正確,則 ASP.NET 不會啟動輔助程序,然後將顯示造成當前帳戶建立失敗的程式碼路徑。
憑據必須為 REG_BINARY 格式,並且包含 Windows API 函式 CryptProtectData 呼叫的輸出。可以用 Aspnet_setreg.exe 來建立加密憑據,並將它們儲存在登錄檔中。該程式使用 CryptProtectData 來完成加密。若要下載 Aspnet_setreg.exe 以及 Microsoft Visual C++ 原始碼和文件,請轉到 ASP.NET 網站並搜尋 aspnet_setreg。
應該對儲存加密憑據的金鑰的訪問許可權進行配置,以便僅向 Administrators 和 SYSTEM 提供訪問權。由於金鑰會被作為 SYSTEM 執行的 ASP.NET 程序讀取,因此應設定以下許可權:
-
Administrators:F
-
SYSTEM:F
-
CREATOR OWNER:F
-
ProcessAccount:R
這可以提供兩道保護資料的防線,如下所示:
-
ACL 許可權要求訪問資料的身份是 Administrator。
-
攻擊者必須在伺服器上執行程式碼 (CryptUnprotectData API) 才能恢復帳戶的憑據。