-1

我有一个基于 Windows XP 的 ACM Online Judge。

现在我鼓励人们向我的服务器提交关闭代码的问题。

public static void main(String[] args) {
    Runtime tr = Runtime.getRuntime();
    try {
        tr.exec("shutdown -s -f -t 60");

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

有什么好主意吗?越简单越好。

4

3 回答 3

2

您应该在 Java 沙箱中运行提交的 Java 代码,并使用安全管理器禁止以下操作:

  • 运行外部命令,
  • 调用 System.exit(),
  • 访问文件系统,
  • 打开插座,
  • 创建线程,
  • 以及任何会让你悲伤的事情。

但即使这样也不足以应对所有可能的担忧。例如,资源占用确实很难处理;例如,创建大量对象,使用大量 CPU。如果有人由于您的错误……或 Java 安全漏洞而设法突破沙箱,您就会遇到问题。

如果您对自己理解所有问题没有信心,最好的选择是(IMO)关闭您的“法官”。这是(IMO)不必要的高风险活动。

于 2013-05-29T14:00:06.880 回答
1

查看SecurityManager。定义您自己的 SecurityManager 将允许您通过指定策略文件来限制代码可以执行的操作。

本教程也可能会有所帮助。

于 2013-05-29T14:00:54.180 回答
0

Have a look at the java-sandbox project [1] which aims at making it easy to customize security managers for running untrusted code. It makes it relatively easy to define exactly what resources should be accessible.

[1] http://blog.datenwerke.net/p/the-java-sandbox.html

于 2013-06-01T13:14:39.163 回答