C# 是否可以使用沙箱并运行C++;或者是';是在浏览器的文本字段中输入的吗?

C# 是否可以使用沙箱并运行C++;或者是';是在浏览器的文本字段中输入的吗?,c#,c++,C#,C++,在经历了十年的桌面开发之后,我正在潜入web开发,我正在试验一些测试概念。我想知道沙箱是否可以运行在浏览器中的文本字段中输入的C++代码?这样,我的意思是运行后端Web服务器上的C++代码或C代码,并返回代码的分析。我想说的是,我不是说运行C++或C代码,它是为了生成任何一种标记,而只是黑盒测试输入的C++或C语言块。p> 根据所使用的web服务器,您将如何调用编译器 如何对代码进行沙箱处理以防止恶意行为?如果我们只考虑一个C变体,那么黑名单/白名单特定的函数和库如何防止恶意行为?或者这个黑名单

在经历了十年的桌面开发之后,我正在潜入web开发,我正在试验一些测试概念。我想知道沙箱是否可以运行在浏览器中的文本字段中输入的C++代码?这样,我的意思是运行后端Web服务器上的C++代码或C代码,并返回代码的分析。我想说的是,我不是说运行C++或C代码,它是为了生成任何一种标记,而只是黑盒测试输入的C++或C语言块。p>
  • 根据所使用的web服务器,您将如何调用编译器
  • 如何对代码进行沙箱处理以防止恶意行为?如果我们只考虑一个C变体,那么黑名单/白名单特定的函数和库如何防止恶意行为?或者这个黑名单会不会太长,限制太大,不允许任何数量的代码运行
  • 这些是我问的一些相当高层次的问题,只是因为我很难找到方向,但我现在将继续研究它们。非常感谢您的帮助

    你可能会觉得有趣。

    有这样的东西

    一个简单的Perl(或Python,…)cgi可以用来调用编译器,解析其结果,运行生成的可执行文件(如果有的话)并显示其结果

    我想看看SELinux(也许是AppArmor?)的访问控制。可能不允许它在磁盘上读写,限制了它的运行时间。我不知道SELinux是否也可以实现后者。

    #1使用C#很容易。NET的反射功能使您可以使用它,这里有一个指向的链接

    #2有点困难,但我认为一个基本的沙盒技术可能涉及在有限的、因此是沙盒的帐户下执行一个动态过程。通过编程,您可以分析动态构建的程序集的依赖项,如果它在某些名称空间(如System.IO)中使用API,则不允许它运行。但至少可以说,这不是小事


    C++没有反射能力,所以第三方库是你的最佳选择。

    < P>如果服务器运行Linux,你可以考虑使用

    。我们实际上用我们的产品IKNoad做了这个。我们正利用这个想法在云中创建一个后端

    我们通过创建一个沙箱来实现这一点,沙箱接受一段特定的代码并执行它,捕获结果并将其返回给用户。这一切都是在云端完成的

    根据所使用的web服务器,您将如何调用编译器 使用

    我们通过使用.Net框架中的CodeDom实用程序来实现这一点。我们正在探索即将推出的“编译器即服务”项目,该项目来自微软公司,代号为Roslyn

    这是使用以编程方式编译的一个很好的起点

    如何对代码进行沙箱处理以防止恶意行为?如果我们 考虑到只有一个C变体,那么 黑名单/白名单特定函数和库,以防止 恶意行为?还是黑名单太长太多 限制允许运行任意数量的代码

    我们通过将代码执行包装在一个单独且有限的AppDomain中来实现这一点。你可以看到一些例子


    此外,您可能希望查看MonoSandBox,它是为Moonlight创建的,但它是一个更健壮的沙盒。我们现在正在尝试使用它,以远离AppDomains。我们相信MonoSandBox比简单的AppDomains好得多。

    认为您需要修复这个:p编辑:接近他们的:D最终编辑:耶!LinkThes将是这样做的一种方式。。。但是我更想知道你为什么要这么做…@thecoshman,原因与codepad网站(见下面的回复)存在的原因类似,只是为了分享代码和它们的运行结果。谢谢你,Paul,这看起来是一个很好的探索能力!您需要根访问权限,而chroot只会更改您的根。(因此得名),它不是一个沙箱,也从未被设计用于此目的。