2

我正在创建一个将在沙盒环境中运行代码的应用程序。这个环境应该只允许不受信任的代码处理它明确给出的资源并返回一个定义的数据类型。我正在使用本文中找到的主体来设置沙箱:

如何:在沙盒中运行部分受信任的代码

我还有一些需要在沙盒环境中运行的代码。不幸的是,当我尝试将类型设置为在沙箱内运行时,出现以下错误:

类型违反了继承安全规则:“MyTypeRunningInSandbox”。派生类型必须要么与基类型的安全可访问性相匹配,要么难以访问。

我不确定为什么会收到此错误,因为基类型和派生类型都是由我创建的,并且两者都不应该比另一个更安全。

我的应用程序结构(帮助您理解):

TypeLoader class
   \
    Trusted Sandbox Manager (i.e. sets up a the new sandbox)
     \              (the error is happening in this class while creating the 
      |             new app domain) 
      |
      |Untrusted Sandbox Manager (i.e. runs the untrusted code)

如果您将我的解决方案与上面的 Microsoft 文章进行比较,我的代码在与以下行等效的情况下失败:

ObjectHandle handle = Activator.CreateInstanceFrom(
newDomain, typeof(Sandboxer).Assembly.ManifestModule.FullyQualifiedName,
       typeof(Sandboxer).FullName );

有关如何解决此问题的任何想法?

4

1 回答 1

5

我终于想通了。我需要更好地理解受信任的程序集和强名称是如何工作的。问题是我的不受信任类型的基本类型位于一个程序集中,该程序集使用与我之前设置的受信任相同的强名称密钥进行签名。当我将基本类型移动到具有不同强名称键的新程序集时,它开始工作得很好。现在看起来如此明显,无法想象为什么我以前没有看到它。

感谢任何给予此考虑的人!

于 2011-03-19T19:02:42.730 回答