【问题标题】:Would a blank Java security policy file be the most restrictive?空白的 Java 安全策略文件会是最严格的吗?
【发布时间】:2015-02-26 22:40:01
【问题描述】:

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

【问题讨论】:

  • 你想限制什么?
  • 任何可能有害的东西。安全管理器似乎是通过允许权限来运行的,所以如果你根本不允许任何权限,我不确定会受到什么限制。
  • 定义“空白安全管理器”。
  • 一个类似pastebin.com/hd4asLJ1的策略文件
  • 因为我之前从未使用过 Java 安全管理器,并且没有意识到我说的话可以说得更清楚。

标签: java securitymanager


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多