asp.net - ASP.NET 中的安全异常和 IIS 7.5 中的“加载用户配置文件”选项

标签 asp.net security exception iis-7

部署新版本的 ASP.NET 2.0 应用程序后,它开始引发安全异常:“System.Security.SecurityException: 请求类型为“System.Web.AspNetHostingPermission, System, Version=2.0.0.0”的权限,Culture=neutral,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,则每次应用程序池启动时都会在 Users 目录中创建临时配置文件。然后,我们的应用程序尝试查询有关此配置文件的“Temporary Internet Files”目录的信息,这是允许应用程序池标识的。因此,即使部分信任,也不会引发异常。

非常好的故障排除类(class)! :)

最佳答案

“加载用户配置文件”设置可以帮助您的另一个例子是临时文件的使用。有时这种用途可能是间接的。例如,SQL Express 在某些情况下可以做到这一点。

所以我的建议。关闭“加载用户配置文件”并检查%TEMP%。然后尝试向用于应用程序池的域帐户授予对 %TEMP% 目录的完全访问权限(或更改访问权限)。也许它可以解决您的问题。

另一个建议是,当您收到“System.Security.SecurityException:请求”时,使用进程监视器(请参阅 http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx )来区域设置将使用用户配置文件的哪些部分(或收到“访问被拒绝”错误)对于“System.Web.AspNetHostingPermission”类型的权限异常。

关于asp.net - ASP.NET 中的安全异常和 IIS 7.5 中的“加载用户配置文件”选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068548/

相关文章:

ASP.net C# - WINWORD.exe

asp.net - 在 Visual Studio 解决方案中创建实际的物理文件夹

c++ - 此 strncpy 存在哪些安全问题?

java 小程序 ExceptionInInitializerError

asp.net - 找不到 web.sitemap 但它存在

asp.net - Extensionless MVC 和 IIS 8 请求过滤

php - 如何防止 PHP 中的 SQL 注入(inject)?

linux - 如何从当前机器获取 HTTP referer?

javascript - 捕获所有 Google API Javascript 异常

mysql - 如何让 MySQL 在 SQL 中抛出条件运行时异常