Sandbox JVM для защиты сервера от ненадежных источников

Как можно защитить мой сервер от злонамеренной активности при приеме и выполнении загруженных, ненадежный код?

Пользователи должны иметь возможность реализовывать мой интерфейс и заданные данные, выполнять некоторые вычисления и возвращать данные. Никаких операций ввода-вывода не требуется и, конечно, никаких манипуляций с потоками / процессами или другого дурачества.

Используя файл 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)

Это надежно? Нужно ли мне делать больше для защиты моей серверной среды от ненадежных источников?

8
задан Synesso 25 October 2010 в 00:59
поделиться