gpt4 book ai didi

c# - 在沙箱中运行 .Net 应用程序

转载 作者:行者123 更新时间:2023-11-30 16:19:33 24 4
gpt4 key购买 nike

几个月来,我开发了一个个人工具,用于在线编译 C# 3.5 Xaml 项目。基本上,我正在使用 CodeDom 编译器进行编译。我正在考虑将其公开,但问题是使用此工具在服务器上做任何事情都非常非常容易。

我想保护我的服务器的原因是因为有一个“运行”按钮可以测试和调试应用程序(在屏幕截图模式下)。

是否可以在沙盒中运行应用程序 - 换句话说,限制内存访问、硬盘驱动器访问和 BIOS 访问 - 而不必在虚拟机中运行它?或者我应该只分析每个代码,还是“禁用”运行模式?

最佳答案

启动一个 AppDomain,在其中加载程序集,寻找您控制的接口(interface),激活实现类型,调用您的方法。只是不要让您无法 100% 控制的任何实例跨越 AppDomain 障碍(包括异常!)。

控制外部代码 AppDomain 的安全策略对于单个答案来说有点复杂,但您可以 check this link on MSDN或者只搜索“code access security msdn”以获取有关如何保护此域的详细信息。

编辑:有些异常是您无法阻止的,因此监视它们并以某种方式记录导致异常的程序集非常重要,这样您就不会再次加载它们。

此外,最好注入(inject)到第二个 AppDomain 中,然后您将使用该类型进行所有加载和执行。这样可以确保没有类型(不会导致整个应用程序崩溃)跨越任何 AppDomain 边界。我发现定义一个扩展 MarshalByRefObject 的类型很有用,您可以在该类型上调用在第二个 AppDomain 中执行不安全代码的方法。它永远不应该返回未标记为可跨边界序列化的未密封类型,无论是作为方法参数还是作为返回类型。只要你能做到这一点,你就成功了 90%。

关于c# - 在沙箱中运行 .Net 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com