Sandbox JVM将服务器从不受信任的来源保护

时间:2010-10-25 00:59:06

标签: java security jvm sandbox

在接受和执行上传的不受信任的代码时,如何保护我的服务器免受恶意活动的影响?

用户应该能够实现我的界面和给定数据,执行一些计算并返回数据。不需要I / O操作,当然也没有线程/进程操作或其他操作。

使用java.policy文件可以拒绝所有内容(通过不授予任何内容)。

$ cat test.policy 
grant {
};

使用此策略文件,未授予的操作将导致安全性异常。

$ cat Print.java
public class Print {
    public static void main(String a[]) throws Exception {
        System.out.println(System.getProperty("os.name"));
    }
}

$ javac Print.java
$ java -Djava.security.manager -Djava.security.policy==test.policy Print
Exception in thread "main" java.security.AccessControlException: 
  access denied (java.util.PropertyPermission os.name read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
    at java.lang.System.getProperty(System.java:650)
    at Print.main(Print.java:3)

这是万无一失的吗?我是否需要做更多工作来保护我的服务器环境不受信任的来源?

1 个答案:

答案 0 :(得分:10)

如果我是你,我不会简单地依赖SecurityManager。是的,如果Java沙箱完美无缺,那么您的配置看起来是正确的,这就足够了。但是看看Java的每个安全版本中修复了多少Java漏洞。例如,latest Oracle Java CPU。很多Java漏洞都是从Sandbox中逃脱的漏洞。这在客户端是非常糟糕的(有些人主张从浏览器关闭Java),但在服务器端会更糟,因为攻击者不必引诱你到他们的网站,他们可以攻击你的服务器

例如,目前我个人有几个这样的漏洞,我正在等待Oracle解决,或者我正在与Oracle进行通信。而且我不是唯一拥有它们的研究员。而且一定有坏人也有。

,即使你虔诚地更新你的Java,新版本出现了第二个,你也不会安全。

我认为至少你应该在操作系统级别,权限等方面拥有控制服务器进程的东西。对不起,我在那里没有很好的建议,但我只是说不,你绝对不能依靠JVM Sandbox来保证服务器的安全。