所以这个想法是一种虚拟教室(一个网站),学生可以在其中上传未编译的.java文件,我们的服务器将对其进行编译并通过C#或PHP执行,而语言无关紧要,创建一个.bat文件并如果程序已正确编译,并且基于某些预先进行的测试执行是否正确,则可以获取控制台的反馈,到目前为止,我们的测试确实可以正常工作,但是我们完全无法控制.java文件中的内容,因此我们希望如果确实发生了某些条件(例如,用户输入,infite循环,套接字实例等),则停止执行。我已经在互联网上进行挖掘,如果有一种方法可以配置Java环境来避免这种情况,但到目前为止找不到任何东西,并且我们不希望我们的后端语言通过文件检查此问题,因为这将彻底搞乱
感谢您的帮助
答案 0 :(得分:0)
您可以配置安全管理器,但是它是doesn't have a very good track record of stopping a determined attacker,并且不做任何资源限制。
您可以使用专用的类加载器来加载不受信任的代码,该类加载器只能看到列入白名单的类。
或者您可以使用诸如docker之类的东西在操作系统级别隔离进程。这也可能会限制其CPU和内存消耗。
我可能会结合使用这些方法,但是在两种情况下都将保留一些风险。
(是的,我意识到这很复杂,但是安全地将任意Java代码沙盒化是一个难题。)