我有两个网络应用程序(预编译网站),一个是第一方,将完全信任。另一个是第三方,应该部分信任(或具有特定权限)。
TrustedAssembly.Web.Pages.MyPage
应该在完全信任的默认AppDomain中运行。
UntrustedAssembly.Web.Pages.SomePage
应该在部分信任AppDomain中运行。
此外,如果TrustedAssembly.Web.Pages.MyPage
动态加载UntrustedAssembly.Web.Controls.SomeControl
,是否可以在部分信任和/或具有特定权限的情况下运行控件,而页面是否完全受信任?
反之亦然,例如UntrustedAssembly.Web.Controls.SomePage
动态加载TrustedAssembly.Web.Controls.MyControl
,当页面在部分信任下运行时,是否可以完全信任地运行控件?
更新/仅供参考:这是.NET 4
答案 0 :(得分:5)
这样做可能有点棘手。以下是两种可能的思路:
第一种是在中型信任中运行应用程序,但要将您想要在GAC中完全信任的任何内容放置在GAC中,以及您希望在bin中部分信任的内容中运行。
请注意,在“反之亦然”方案中,受信任控件可能需要在能够执行完全信任操作之前执行安全性“断言”。 e.g。
(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)).Assert();
第二种思路是以完全信任的方式运行应用程序,然后使用自定义Evidence加载要在中等信任中运行的任何程序集。 e.g。
var evidence = new Evidence();
// Initialize the Evidence
Assembly.LoadFrom(path, evidence);
但请注意,正确设置Evidence对象不适合胆小的人,而且我不确定我会不会那样做。
不是一个完整的答案,但希望有些想法可以导致一个:)
答案 1 :(得分:3)
+1 David Ebbo - 在部分信任下运行整个应用程序并提升GACed程序集的调用只是一种理智的方法。
要考虑的更多要点......