.net

您所在的位置:网站首页 苹果手机授予信任 .net

.net

2024-07-09 20:56| 来源: 网络整理| 查看: 265

想象以下环境:XBAP以部分信任模式运行的应用程序(默认行为;要求完全信任不是一个选项 - 但在您询问之前,如果对 XBAP 给予完全信任,一切都会按预期工作)正在引用本地安装的程序集,位于 GAC 中。为此,我们为本地程序集启用“AllowPartiallyTrustedCallers”选项,并授予完全信任。 (想象这是某种本地连接对应物)

(顺便说一下,我们知道使用 AllowPartiallyTrustedCallers 属性的安全方面,但这超出了本文的范围,只是不关心)

现在,即使我们的本地 GAC 程序集具有完全信任(我们可以随时调用 Assembly.GetExecutingAssembly().IsFullyTrusted 来检查这一点),它也会失败任何要求(隐式或显式),因为它是由部分受信任的调用者(我们的 XBAP)调用的。 (如果我误解了什么请纠正我)。幸运的是,我们可以在本地 GAC 程序集内进行显式断言以获得权限,例如:

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

这样,我们就可以在此时阻止按需遍历整个堆栈,并根据需要进行任何文件访问。 (再次,请纠正我......) 这实际上非常有效!(在本例中)

问题是,我们只是不做任何文件 IO,事实上我们正在调用外部库,它应该能够做任何他们想做的事情(而且他们可能会做很多事情,访问注册表,发出 Web 服务请求,写入文件,调用非托管代码——具体细节我们不知道,但我们可以信任它们),并阻止需求堆栈遍历到达我们部分信任的调用者.我们应该能够实现这一目标,因为一切都是从我们本地安装且受信任的 GAC 程序集完成的。 (同样,请不要关心这里的安全方面,只是假设,我们可以信任客户)

解决方法:

我们首先想到的是,在使用外部库之前,对几乎所有权限声明一组权限 (PermissionSet)。这几乎可以工作,但看起来在某些时候仍然会发生安全异常 - 要么是因为外部库可能会启动更多线程,但由于某种原因失败,或者因为它访问 entryassembly - 事实上,我们不知道。

其次,我们尝试了以下属性

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

也没用。

第三,我们考虑打开一个新的 AppDomain,使完全受信任的 GAC 程序集成为 AppDomains 入口点,并在该应用程序域内运行任何东西 - 任何堆栈遍历都无法再到达部分受信任的调用者 - 在我们的理论中) .不幸的是,我们无法实现这个……或者新创建的 AppDomain 无法满足更多要求,即使设置为在“MyComputer”安全区域证据或不受限制的 SecurityPermission 下运行。我无法明确授予对整个 AppDomain 的完全信任。

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

现在,由于这应该是很多信息,我希望您了解我们要存档的内容。

直截了当:完全信任的程序集如何断言对其调用的程序集完全信任,停止所有堆栈遍历以到达部分信任的调用方?

非常感谢

最佳答案

查看 Microsoft 关于允许 Partially Trusted Callers to Full Trust Assemblies 的文档我不相信这是可能的。

你一直强调我们需要避免安全问题,但实际上,你试图用你的解决方案做的是基本上绕过 .NET Framework 中代码访问安全系统的每个部分,我'您将很难相信您将能够获得可行的解决方案。

除此之外,我无法想象这个过程真的需要这样来完成。

您不能将此处理从部分受信任的调用方卸载,然后将通信传递给本地运行且已经受信任的东西吗?

关于.net - 在部分信任程序集调用的受信任程序集中授予 FullTrust,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387564/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3