您的位置:首页 > 编程语言 > ASP

[BUG]ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限

2010-07-30 14:47 666 查看
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

对路径“//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参考:

要加密用户名和密码并将它们存储在注册表中,请按如下方式设置 userNamepassword 属性。

复制

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) 才能恢复帐户的凭据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐