如何在沙盒中运行不受信任的Java Swing应用程序?

3
我发现Java有一些安全权限来控制对AWT资源的访问。是否有任何方法来控制Swing应用程序可以或不能做什么,以避免在多应用程序环境中不受信任的应用程序相互干扰?
例如:
- 打开JFrame。 - 打开完全透明的JFrame。 - 关闭其他不受信任的应用程序的JFrame实例。 - 等等...
问题更新:
这些不受信任的应用程序从唯一的JVM中启动,在单独的线程中加载自单独的类加载器。我想知道如何确保上述任何干扰示例都不会发生。
此外,如何防止不受信任的应用程序通过模仿其UI来假装成来自不同应用程序的应用程序?任何建议都欢迎。

关闭其他不受信任的应用程序的JFrame实例,怎么做?Java应用程序无法做到这一点。 - Kaj
1
在一个多应用程序环境中,只使用1个jvm,有什么阻止你这样做的呢? - Vincent Cantin
通常,不同的应用程序由不同的类加载器加载,因此我仍然不明白一个应用程序如何能够关闭另一个应用程序创建的JFrame。 - Kaj
例如,通过调用其“close”函数,如果它找到了获取其引用的方法。 - Vincent Cantin
@Vincent,我认为你应该更新你的问题,说明你是如何在单个JVM中启动这些应用程序的。这可能会使问题变得可回答。在当前情况下,@Kaj所提出的观点是正确的。我们需要知道你是如何启动多个Swing应用程序的。 - Vineet Reynolds
感谢Kaj和Vineet的评论。我更新了我的问题。 - Vincent Cantin
1个回答

1

我不确定你想做的事情是否可能。AWT在沙盒中运行应用程序时具有一组可以配置的权限(请参见AWTPermission),但它们非常有限,似乎更针对防止小程序做坏事。

此外,防止一个应用模仿另一个应用似乎对我来说是不可能的;如果两个应用都被允许创建UI组件,那么什么能阻止一个应用创建与另一个应用相同的UI组件呢?

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


你的疯狂想法并不那么疯狂,但我在想它是否足够高效。我的结论是,对于我想做的事情,Java没有提供足够的应用程序隔离支持。谢谢你的回答。 - Vincent Cantin
我意识到浏览器为UI提供了更好的隔离工作,我可以尝试使用它们的Javascript扩展沙盒来实现我的目标。 - Vincent Cantin

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