空白的Java安全策略文件是否会限制最多?

时间:2014-12-30 18:56:30

标签: java securitymanager

我正在创建一个允许用户执行上传的Java文件的应用程序。我试图限制他们可以用安全管理器做什么。空白的策略文件是否会限制最多,不允许它们尽可能多地执行操作?这会限制他们做一些基本的事情,我不应该限制他们吗?

1 个答案:

答案 0 :(得分:5)

是的,不授予权限的安全策略是您可以使用标准Java安全管理器定义的最严格的策略,并且会阻止在该JVM中运行的任何代码执行任何需要安全性的操作允许。 Java核心API通常会检查各种安全权限,然后允许在安全管理器下运行的代码执行任何可能有害的操作,因此理论上,在没有授予权限的情况下运行不受信任的代码是安全的。

有一些例外:例如,允许从系统类路径加载的代码调用System.exit(),这将停止您的应用程序,并且没有权限运行的代码仍然可以创建任意数量的新线程,这可能会锁定系统。如果您担心这些问题,则需要考虑编写自定义安全管理器。

如果您在同一JVM中运行应用程序代码和用户提供的代码,则需要授予应用程序代码权限,以便在不授予对不受信任的代码的权限时执行所需的操作,因此您需要在策略文件中添加以下内容:

grant codeBase "file:path/to/trusted/application/jars" {
  permission java.security.AllPermission;
};

请注意,如果您在命令行上指定策略文件,则需要使用double equals(例如-Djava.security.policy ** == ** policy.file),否则您的策略将扩展默认的Java安全策略,该策略为所有代码授予一组最小权限。