【发布时间】:2010-10-25 00:59:05
【问题描述】:
在接受和执行上传的不受信任的代码时,如何保护我的服务器免受恶意活动?
用户应该能够实现我的界面和给定的数据,执行一些计算并返回数据。不需要 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)
这是万无一失的吗?我是否需要采取更多措施来保护我的服务器环境不受不受信任的来源的影响?
【问题讨论】: