7

出于安全考虑,我需要找到一种方法来限制 JVM 将运行哪些文件。我有大约 5 个可以运行的 jars,没有其他东西可以在 JVM 上运行。这是由于某些特定于域的限制,必须将特定权限分配给 JVM,但这些权限不应该对任何想要编写和执行 java 文件的人可用。

我觉得可能有某种功能可以在 JVM 中仅运行受信任/签名的代码,但我无法找到任何相关信息。

如果有人有任何想法,那就太好了!

4

2 回答 2

5

如果您不需要能够从其他 JAR 读取代码,您可以使用SecurityManager来防止读取任何其他 JAR,或从目录加载类。您还需要限制共享库的反射和加载,以防止手动加载类。

于 2013-01-09T16:57:09.027 回答
1

我认为这不是那么简单...如果您不完全控制用户站,您将无法使用 SM 保护 java。例如,原始类加载器加载不受 SM 检查和许多其他验证的类......所以用户可以在 bootclasspath 中添加一个将拥有所有权限的库......(例如:java 中的 classes 文件夹或 lib 文件夹安装,如果他拥有 jvm,他甚至可以覆盖 java.* 包)

你可以做的是:

  • 混淆你的代码
  • 对您的 java 应用程序使用隐藏的 api(不是 'java -jar myapp.jar "/path/to/file/to/encrypt"')

而且您仍然不是 100% 安全...所有代码都可以进行逆向工程并提取算法和密钥,您所能做的就是让它变得足够困难,使其不再具有吸引力。

编辑

我认为你可能有一个很大的设计问题。也就是说,如果文件加密是用户驱动的,那么用户知道加密密钥,所有安全性都保留在该密钥中,而不是您的代码中。任何人都可以尝试解密它,但只有拥有有效密钥的人才能解密。如果是这种情况,那么您的代码不需要任何特殊处理。

还有另一种可能是您在您的 java 应用程序中嵌入了密钥......并且这个密钥在您的所有安装中都是静态的,那么这个密钥不再是秘密的,它不是加密而是混淆。

于 2013-01-09T21:50:56.963 回答