.NET Core 限制插件权限
Posted
技术标签:
【中文标题】.NET Core 限制插件权限【英文标题】:.NET Core limit plugin permissions 【发布时间】:2018-03-17 18:48:03 【问题描述】:在 .NET Framework 中,我能够将插件(dll)加载到它们自己的 AppDomain 中,限制 App Domin 拥有的权限(例如,只能从给定目录中读取),并安全地执行这些插件.随着 .NET core 中 AppDomain 支持的移除,现在有什么方法可以实现这样的目标吗?
【问题讨论】:
你看过AssemblyLoadContext
吗?
是的,我有,但我没有看到任何方法可以对加载的 dll 设置限制。我不只是想加载一个 dll;我想加载它,然后限制代码可以做什么。我现在通过在单独的应用程序域中加载 dll 并在 AppDomain 上设置非常严格的权限集来做到这一点
【参考方案1】:
让我们参考官方来源。这是Porting to .NET Core文章“沙盒”部分的引述:
为什么停产?沙盒,即依赖运行时或 限制托管应用程序可以使用哪些资源的框架 访问,被认为是 .NET Core 的非目标。沙盒 应用程序和组件也很难做到正确,这是 为什么一般建议客户不要依赖它。它也使 实施更复杂,通常会产生负面影响 不使用沙盒的应用程序的性能。因此,我们做 在 .NET Core 中不提供沙盒功能。
我应该改用什么?使用操作系统提供的安全性 边界,例如运行进程最少的用户帐户 一组权限。
因此,正确隔离不受信任的插件的正确方法是将其加载到在受限用户帐户下启动的单独进程中。当然,它使事情变得复杂,尤其是在主机和插件之间共享状态和通信方面。但是,.Net Core 目前没有提供任何其他方法。
【讨论】:
以上是关于.NET Core 限制插件权限的主要内容,如果未能解决你的问题,请参考以下文章
net core体系-web应用程序-4asp.net core2.0 项目实战-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级