【问题标题】:How to run untrusted Java Swing application inside a sandbox?如何在沙箱中运行不受信任的 Java Swing 应用程序?
【发布时间】:2011-06-08 13:45:06
【问题描述】:

我发现 Java 有一些安全权限来控制对 AWT 资源的访问。是否有任何东西可以控制 Swing 应用程序可以做什么或不可以做什么,以避免不受信任的应用程序在多应用程序环境中相互干扰?

例如:

  • 打开一个 JFrame。
  • 打开一个完全透明的 JFrame。
  • 关闭其他不受信任的应用程序的 JFrame 实例。
  • 等等...

更新问题:

不受信任的应用程序从一个独特的 JVM 启动,在一个单独的线程中,并从一个单独的类加载器加载。我想知道如何确保上述中断示例都不会发生。

另外,如何防止不受信任的应用程序通过模仿其 UI 来伪装成来自不同应用程序的应用程序?欢迎任何建议。

【问题讨论】:

  • 关闭其他不受信任的应用程序的JFrame实例,怎么做? Java 应用程序无法做到这一点。
  • 在只使用 1 个 jvm 的多应用环境中,是什么阻止了你这样做?
  • 单独的应用程序通常由单独的类加载器加载,所以我仍然看不到一个应用程序将如何关闭另一个应用程序创建的 JFrame。
  • 通过调用它的“close”函数,例如,如果它找到了一种方法来获取它的引用。
  • @Vincent,我认为您应该更新您的问题以说明您如何在单个 JVM 中启动这些应用程序。这可能使问题可以回答。在当前情况下,@Kaj 提出的观点是有效的。我们需要知道您如何启动多个 Swing 应用程序。

标签: java security swing sandbox


【解决方案1】:

我不确定你想做什么是可能的。 AWT 有一组权限,可以在沙箱中运行应用程序时进行配置(请参阅AWTPermission,但它们非常有限,而且似乎更针对防止小程序做坏事。

最重要的是,阻止一个应用模仿另一个应用对我来说似乎是不可能的;如果允许两个应用程序创建 UI 组件,是什么阻止了一个应用程序创建与另一个应用程序相同的 UI 组件?

如果您有一个您信任的应用程序和一个您不信任的应用程序,您需要这些应用程序无法控制的代码以不同的方式运行它们;例如,一个疯狂的想法是一个窗口管理器,它在不受信任的应用程序周围放置一个红色边框,以便用户可以将其识别为不受信任。但是当两个应用程序都在同一个 JVM 中运行时,Java 似乎没有足够的支持,因为似乎没有任何方法可以隔离这两个应用程序(一个简单的 FocusListener 可以允许一个应用程序访问到另一个组件并更改它们)。

【讨论】:

  • 你的疯狂想法并没有那么疯狂,但我想知道它是否足够有效。我的结论是 Java 没有为我想做的应用程序隔离提供足够的支持。谢谢你的回答。
  • 我意识到浏览器正在为 UI 提供更好的隔离工作,我可能会尝试使用他们的 Javascript 扩展的沙包来实现我的目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2015-07-07
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多