想象一下下面的环境:一个 XBAP 程序在运行中的部分信任的模式(默认的行为;需要完全信任并不是一种选择-但之前你问问 如果完全信任是给予XBAP,一切都正常工作)是引用本地安装的大会,这是位于中的建议。为了实现这一目标,我们使"AllowPartiallyTrustedCallers"选择的地方组件,并且也完全信任是理所当然的。(想这是某种地方连接的对应)

(通过的方式,我们都意识到安全方面的使用AllowPartiallyTrustedCallers属性,这是出的范围这一员额,虽然,只是不小心)

现在,即使我们的地方GAC会 完全信任 (我们可以检查这一通过调用 Assembly.GetExecutingAssembly().IsFullyTrusted 在任何时间),它将会失败的任何要求的(隐含或明示的),因为它是由一个部分信任的呼叫者(我们XBAP). (纠正我,如果我误解的东西).Fortunatelly,我们可以做到明确的断言获得权限内的当地GAC会,例如:

new System.Security.Permissions.FileIOPermission(.....).Assert();

通过的是,我们可以防止全栈走上要求的权利在这一点上,做任何文件,访问因为我们想要的。(再次请纠正我...) 这实际上完美的作品! (在这种情况下)

问题是,我们只是没有做任何文件IO,事实上,我们正在呼叫 外部图书馆 这应该能够 做任何他们想要的 (他们可能会做了很多东西,在访问的注册表,使得网络服务请求,编写文件、呼叫管理的代码-在详细说明我们不知道,但是我们可以信任他们),并防止需求的堆栈步达到我们的部分信任的呼叫者。我们应该能够实现这一点,因为一切都是从我们在当地安装和信任的GAC会。(再次请关心的不安全问题在这里,只是假定,即我们可以信任的客户)

方法来解决这个:

  • 我们认为,第一,主张组的权限(PermissionSet)几乎任何许可之前的工作与外部图书馆。这几乎是工作,但它看起来像在某一点上仍然是一个安全的异常发生,因为外部图书馆可能会开始更多线程的失败通过一些原因,或因为其访问entryassembly-事实上,我们不知道。

  • 第二,我们试图以下ttribute

[System.Security.Permissions.PermissionSet(
  System.Security.Permissions.SecurityAction.Assert, Name = "FullTrust")]

它没有工作。

  • 第三,我们认为打开一个新的程序域,使得完全信任GAC会的应用程序域的切入点,并运行任何内部的这个程序域的任何堆走永远不能达到部分信任的来电了-在我们的理论)。可惜,我们没有能够实现这个...或新建立的程序域失败,甚至更多的要求,即使设置了下运行的"我的计算机"安全区域的证据,或无限制的SecurityPermission.我不能明确地授予完全的信任的整个程序域.

  • 第四,使用 caspol 是不是一种选择。(由于部署的原因)

现在,由于这应该是一个很大的信息,我希望你理解什么我们要存档。

得到这一点: 如何可以完全信任的大会主张完全信任的程序集它的呼吁,停止所有堆散步达到部分信任的来电?

许多在此先感谢

有帮助吗?

解决方案

看文档,从Microsoft关于允许 部分信任的呼叫者完全信任的集会 我不相信,这将是可能做到的。

你继续强调,我们需要避免的安全关切,但在所有的现实,什么你想做你的解决方案是绕过基本上每一部分代码的访问权的安全系统之内。净框架,并且我会很难相信,你将能够得到一个可行的解决方案。

在此,我不能想象的是,这个过程是一些真正需要这样做的方式。

你能不能卸载这个处理部分信任的呼叫者然后通过通信的东西本地运行并已经信任吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top