IIS 7.5上的经典ASP中的WshShell.Exec中的System.IO.FileLoadException

时间:2014-02-05 19:57:49

标签: c# asp-classic permissions iis-7.5 .net

我正在使用DidiSoft OpenPGP for .NET库将C#编译成一个由Classic ASP执行的exe。目标是更新此旧网站的安全性以使用PGP。这是一个旧网站,所以我们不能在没有大量费用的情况下重写它。

我尝试使用这个库的原因是,当我们调用编译的C#EXE引用时:

using System.Security.Cryptography;

我会在ASP中得到一个空白输出,并且IIS会在事件日志中抛出类似这样的错误:

Faulting application name: PGPTest.exe, version: 1.0.0.51, time stamp: 0x52f28ee5 
Faulting module name: KERNELBASE.dll, version: 6.1.7601.18229, time stamp: 0x51fb1116 
Exception code: 0xe0434352 
Fault offset: 0x0000c41f 
Faulting process id: 0x5f08 
Faulting application start time: 0x01cf22a83ae734f4 
Faulting application path: d:\inetpub\_bin\[redacted website name]\PGPTest.exe 
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll 
Report Id: 789751fa-8e9b-11e3-87e1-0050568e508f
Application: PGPTest.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.IO.FileLoadException
Stack: 
   at PGPTest.Program.Main(System.String[])
================
.NET Runtime version 4.0.30319.1008 - There was a failure initializing profiling API attach infrastructure.  This process will not allow a profiler to attach.  HRESULT: 0x80004005
Process ID (decimal): 24328.  Message ID: [0x2509].

因此,当我使用DidiSoft OpenPGP或System.Security.Cryptography时,我会收到错误。

在Classic ASP中,应用程序调用:

WshShell.Exec(%pathtoexe%) 

如果我们将应用程序池更改为在LocalSystem而不是NetworkService下运行,我们会收到输出IF 。所以它似乎与权限有关。

我们的服务器正在运行:

  • Server 2008 R2
  • .NET 4.0

我们假设在LocalSystem下运行应用程序池是不安全的;它是否正确? 关于如何让这个工作的任何想法?

谢谢

更新:图书馆的作者向我确认它确实使用了System.Security.Cryptography作为其部分算法。

更新2:要进行ulluoink:如果您完全阅读本文,您会发现这事实上与Classic ASP有关。我怎么知道你问的?因为将代码从经典ASP执行的C#应用​​程序移动到ASP.NET 4 Web API应用程序时,完全相同的服务器上的相同代码工作正常。它似乎是一个权限问题,与Classic ASP的执行权限直接相关。

因此,当前的解决方法是将引用System.Security.Cryptography的代码部署到ASP.NET Web API应用程序中的同一服务器。我们正在使用Classic ASP发布到ASP.NET应用程序;具体发送序列化的数据:http://www.aspjson.com/

1 个答案:

答案 0 :(得分:0)

是的,因为LocalSystem不安全,所以运行暴露在互联网上的网站。您可以在加载页面时使用filemon或processmon来查看哪些文件需要来自哪些用户的权限。

http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx