如何在接受和執行上載的不可信代碼時保護我的服務器免受惡意活動的侵害?Sandbox JVM從不受信任的來源保護服務器
用戶應該能夠實現我的接口和給定數據,執行一些計算並返回數據。不需要I/O操作,當然也不需要線程/進程操作或其他tomfoolery。
使用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)
這是萬無一失?我需要做更多的事情來保護我的服務器環境不受信任的來源嗎?
聽起來不錯。如果我也是作爲linux VM中的非特權用戶執行的,那麼該怎麼辦? – Synesso 2010-10-26 02:02:25
對我來說似乎很好,但我不能以很多權威來談論這件事。我只知道,當面對整個世界時,JVM安全本身就是脆弱的。 – 2010-10-27 01:27:27