【问题标题】:Dynamic Code Generation and security动态代码生成和安全
【发布时间】:2011-09-28 13:31:12
【问题描述】:

我在使用JSON.Net 序列化库时遇到了问题,我希望得到在 CAS 和 AppDomain 管理方面比我更专业的人的意见。

如需更多问题信息,可以参考issue 21575。我为此问题提交了a patch

这个想法是当你第一次访问它时,DynamicCodeGeneration 标志在当前应用程序域中被静态设置一次。但是,我认为允许应用程序域的权限可以更改。

例如,如果你在一个应用程序域中调用一个对象的方法,跨越另一个应用程序域,似乎你继承了最严格的应用程序域的权限。所以对我来说,应用程序域的权限不会改变并且您可以一劳永逸地静态设置DynamicCodeGeneration的假设是错误的。

我说的对吗?还是我错过了一些关于 CAS 和 AppDomain 管理的内容?

编辑

我添加了一个关于我认为正在发生的事情的小架构:http://www.sp4ce.net/data/temp/appdomain.png 你认为这是正确的吗?

【问题讨论】:

  • 您是否有关于在跨应用程序域调用中继承更严格的权限的断言的参考?
  • 不,我没有任何参考资料,这就是我在这里提出问题的原因。我唯一的提示是我在代码中看到的:一次它说他有权利(即: new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); 不抛出异常),第二次,当调用交叉域,它说他不再正确了。
  • 您能否详细解释一下每个 appdomain 的血统?他们是否有父/子关系,或者是否正在进行某种远程处理?
  • 您好,感谢您的提问。我画了一个我认为正在发生的事情的小模式。我不确定这种权利继承,但它对你来说是否正确? sp4ce.net/data/temp/appdomain.png
  • 感谢您的插图。所有这些调用都发生在同一个线程上吗?

标签: c# appdomain json.net code-access-security


【解决方案1】:

我认为您的单元测试为您的理论提供了证据。在跨应用程序域调用中,似乎执行了更严格的 CAS 限制。不过,我不认为,未来对限制较少的应用程序域的本地调用(不远程处理限制性应用程序域)将继续执行限制性更强的权限集。

您尝试解决的 JSON.Net 问题是权限集被检查一次,并且在未来可能来自更严格的应用程序域的调用中没有重新验证。鉴于权限可以根据调用上下文而更改,因此在使用权限的最本地范围内要求权限是有意义的。您的解决方案是让调用代码负责通知 JSON.Net 是否使用 DynamicCodeGeneration。我认为 JSON.Net 库中更好的解决方案是每次调用 JsonTypeReflector.DynamicCodeGeneration getter 时都要求获得所需的权限,而不是像现在这样缓存值。

【讨论】:

  • 他们为他的假设而不是理论添加了证据。
猜你喜欢
  • 2015-04-12
  • 2010-12-17
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多