【发布时间】:2011-03-05 08:33:23
【问题描述】:
在部署我们的 ASP.NET 2.0 应用程序的新版本后,它开始引发安全异常:„System.Security.SecurityException: Request for the permission of type 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0 , Culture=neutral, PublicKeyToken=b77a5c561934e089' 失败。”。
在 Internet 上进行快速研究后,我们能够通过在 IIS 7.5 应用程序池中将“加载用户配置文件”设置为 True 来解决此问题。这个解决方案在stackoverflow上也多次提到:
- Strange ASP.NET error !
- System.Web.AspNetHostingPermission Exception on New Deployment
- Running a asp.net web application project on IIS7 throws exception
但是我们无法找到它必须为真的原因。我们审查了新版本中的所有更改(很高兴只有少数),但没有发现任何可疑之处(如某些文章建议的那样,无法访问注册表或临时数据等)。当 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 文件”目录的信息,允许应用程序池的身份。因此,即使部分信任也不会引发异常。
非常好的故障排除会议! :)
【问题讨论】:
-
感谢 Peter 的调查工作,我遇到了同样的问题,streams 实用程序(在 superuser.com 问题中列出)是我如何解锁我的 webapp 目录中的所有文件。现在我可以关闭加载用户配置文件选项!
-
太棒了,我们刚刚遇到这个问题,无法正确解释。
-
下面的答案有详细解释stackoverflow.com/questions/17149132/…
标签: asp.net security exception iis-7