从字节数组运行程序而不创建临时文件。 C#

我有许多存储在IIS服务器(MSSQL)上的.exe文件,其中包含报告和对服务器上文件的访问权限。 (这些文件将在星期日更改。)

连接到SQL Server并选择.exe文件后,我正在下载(在SQL中选择),现在我有一个分配给变量的字节数组。 我无法在未知目录中创建像“temp.exe”这样的临时文件,因为我知道有很多方法可以理解新创建的文件目录和…

这是不安全的,因为我的用户是专业的,如果他们中的一个知道这些方式……

所以,我想知道是否可以从字节数组运行.exe文件(默认为从“Windows资源管理器”运行)而不创建临时文件?

tnx update:exe文件是.net和Manager将上传新文件或更改文件。

请注意,您对任何额外安全性的信念都是虚幻的。 如果用户有权访问机器来读取文件,他们也可以读取进程的内存。

但是,要回答您的问题,您要求做的事情很简单并在此处进行描述: 加载EXE文件并从内存中运行它 。

实质上,您执行以下操作:

  1. 将您的字节数组传递给Assembly.Load以创建新的Assembly
  2. 使用EntryPoint属性读取该程序集的入口点。
  3. 使用Assembly.CreateInstance创建实例,并在该实例上调用该方法。

代码如下所示:

 Assembly a = Assembly.Load(bytes); MethodInfo method = a.EntryPoint; if (method != null) method.Invoke(a.CreateInstance(method.Name), null); 

听起来不安全,为什么你要在db中存储exécutables? 谁上传了他们? 他们在文件系统上是否存在,如果是恶意的话他们就像危险一样危险。

那些.net是吗? 如果是这样,您可以将程序集加载到具有安全限制的子appdomain中,我很确定您可以在不复制到磁盘的情况下执行此操作。

对于常规本机exe,我认为只有在没有物理文件支持的情况下才能启动exe(即使在任务管理器中,您也可以看到启动程序的路径)

这里有两个不同的安全问题:

  1. 有人可以看到您从数据库中下载的文件。
  2. 执行该文件可能是一个安全威胁。

首先要考虑的问题:在服务器上创建一个目录并限制对该目录的访问,这样除了运行服务器程序的用户帐户之外,没有人可以查看/使用它。 将字节数组保存到该目录中的临时文件中,执行它,并在进程完成后删除临时文件。

第二个问题:您需要在沙盒环境中运行该可执行文件。 在.NET中,您可以通过将代码加载到您已设置为仅具有部分信任的单独AppDomain中,在沙盒环境中运行代码。 如何做到这一点值得另一个问题。