我写了一个插件系统,插件主机需要知道每个模块有哪些“使用”。
主要思想是限制插件可以在代码中使用的内容,以评估其安全级别。示例:插件无法操作磁盘或网络,那么我正在考虑通过“使用”或加载的 dll 来限制。
我搜索了如何获取插件的“加载模块”,但我没有找到 System.IO 的参考或任何可以提供帮助的 dll。
然后我查看 assembly.Get***() (modules/fields/...)
也许一个axemple可以帮助:插件'A'EntryPoint.cs
using System.Collections.Generic; <--- is allowed
using System.IO; <--- it is not allowed
using System.Net; <--- it is not allowed
.... Declare a namsespace, classes and other... AND i used a streamwriter
我需要知道插件是否使用 System.Net 或其他禁止引用。
谢谢(非常感谢所有可能性)
编辑:1)Assembly.GetReferencedAssemblies 不起作用,某些 DLL 具有允许和禁止的引用
2)磁盘/网络访问可以使用一些管理此访问的“帮助库”来完成。
3)沙盒解决方案:我看到了这个,但主要问题是我有一个虚拟磁盘之类的东西,当用户要求列出一个目录时,这个操作会询问服务器“这个用户在这个文件夹中有什么文件?” 然后此服务器将收集数据库中的所有文件并返回此列表。当必须读取/写入文件时,需要同步此修改。与可以读取此文件的所有其他计算机。网络操作特定于一系列“虚拟合作伙伴”,但没有完整的 VPN 解决方案。