几个月来,我开发了一个个人工具,用于在线编译 C# 3.5 Xaml 项目。基本上,我使用 CodeDom 编译器进行编译。我正在考虑将其公开,但问题是使用此工具在服务器上执行任何操作都非常非常容易。
我想保护我的服务器的原因是因为有一个“运行”按钮来测试和调试应用程序(在屏幕截图模式下)。
是否可以在沙箱中运行应用程序 - 换句话说,限制内存访问、硬盘驱动器访问和 BIOS 访问 - 而不必在虚拟机中运行它?或者我应该分析每个代码,或者“禁用”运行模式?
小智 4
启动一个 AppDomain,在其中加载程序集,查找您控制的接口,激活实现类型,调用您的方法。只是不要让任何实例跨越您无法 100% 控制的 AppDomain 屏障(包括例外!)。
控制外部代码 AppDomain 的安全策略对于单一答案来说有点太多,但您可以在 MSDN 上查看此链接,或者仅搜索“代码访问安全 msdn”以获取有关如何保护此域的详细信息。
编辑:有些异常是您无法阻止的,因此监视它们并以某种方式记录导致异常的程序集非常重要,这样您就不会再次加载它们。
此外,最好将一个类型注入到第二个 AppDomain 中,然后使用该类型来执行所有加载和执行。这样您就可以确保没有类型(不会导致整个应用程序崩溃)会跨越任何 AppDomain 边界。我发现定义一个扩展 MarshalByRefObject 的类型很有用,您可以在该类型上调用在第二个 AppDomain 中执行不安全代码的方法。它永远不应该返回未跨边界标记为可序列化的未密封类型,无论是作为方法参数还是作为返回类型。只要你能做到这一点,你就已经成功了 90%。
| 归档时间: |
|
| 查看次数: |
4895 次 |
| 最近记录: |