Java 防止对在线判断软件的恶意攻击

Java 防止对在线判断软件的恶意攻击,java,security,Java,Security,我有一个基于Windows XP的ACM在线评委 现在我鼓励人们向我的服务器提交关闭代码 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

我有一个基于Windows XP的ACM在线评委

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

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();
    }
}

有什么好主意吗?越简单越好。您应该在Java沙箱中运行提交的Java代码,其中包含禁止以下操作的命令:

  • 运行外部命令
  • 正在调用System.exit()
  • 访问文件系统
  • 打开插座
  • 创建线程
  • 还有任何会让你悲伤的事
但即便如此,也不足以解决所有可能的问题。例如,很难处理资源占用问题;e、 g.使用大量CPU创建大量对象。你有一个问题,如果有人因为你的一个错误而设法冲出沙箱,会发生什么。。。或者Java安全漏洞

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

请检查。定义自己的SecurityManager将允许您通过指定


可能也会有帮助。

请看一看java沙盒项目[1],该项目旨在使定制安全管理器以运行不受信任的代码变得容易。它使得准确定义应该访问哪些资源相对容易


[1]

当我们参加ACM比赛时,发送叉形炸弹、试图偷测试安全带或让评委头疼,都会让你被踢出局。我会用政策来解决这个问题。谢谢,这很有效。还有一个问题:如果我使用“java-DsecurityManager测试”来防止攻击。我想知道是否有一些很棒的代码get-SecurityException。