基于安全策略创建Java沙盒

16

我需要创建一个环境来运行可能不受信任的代码。程序只允许连接到预配置的地址:端口,除此之外不能执行其他操作(甚至无法读取系统时间)。我已经编译了类白名单。我搜索了类似的问题,但只找到基于SecurityManager的模板,而我所知道的是它已经过时了。 请问有人能给我一个简单的示例,如何基于安全策略和AccessController在沙盒中运行代码?

1个回答

16

重要提示 — 自从Java 17版本起,策略文件和安全管理器已被弃用并标记为将来移除这篇博文解释了如何处理安全管理器后的沙盒问题


根据我所知,目前仍然是SecurityManager执行安全检查。但是现在似乎委托给AccessController进行操作。
首先,您需要打开安全管理器。

-Djava.security.manager

如果省略此参数,将完全没有沙盒。

其次,您需要告知策略文件的位置:

-Djava.security.policy=

这将在您的Java主目录中添加您的权限,以及已经定义的权限。原始的沙盒规则位于.../jre/lib/security/java.policy。然而,如果您希望您的策略是唯一的,您需要使用双等号"=="。这样,您完全控制允许的内容。
例如:

-Djava.security.policy==

我建议您使用Java附带的"policytool"工具。它相当基础,但可以帮助您快速编写正确语法的策略文件。
希望这对您有所帮助...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接