防止对Online Judge软件的恶意攻击

时间:2013-05-29 13:51:45

标签: java security

我有一个基于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();
    }
}

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

3 个答案:

答案 0 :(得分:2)

您应该在Java沙箱中运行提交的Java代码,其中security manager禁止以下内容:

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

但即使这样也不足以解决所有可能的问题。例如,处理资源占用非常困难;例如使用大量CPU创建大量对象。如果有人设法突破沙箱,由于您的错误......或者Java安全漏洞,您就会遇到问题。

如果您不确定自己是否了解所有问题,最佳选择是(IMO)关闭您的“裁判”。这是(IMO)不必要的高风险活动。

答案 1 :(得分:1)

结帐SecurityManager。定义您自己的SecurityManager将允许您通过指定policy file来限制代码的功能。

This tutorial也可能会有所帮助。

答案 2 :(得分:0)

查看java-sandbox项目[1],该项目旨在简化自定义安全管理器以运行不受信任的代码。它可以相对容易地确定应该可以访问哪些资源。

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