JVM是否具有只执行文件白名单的特性



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

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

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

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

我觉得没那么简单…如果不能完全控制用户站,就不能用SM保护java。例如,Primordial classloader加载不受SM检查和许多其他验证约束的类……因此,用户可以在引导类路径中添加一个库,它将拥有所有特权....(例如:java安装中的classes文件夹或lib文件夹,他甚至可以覆盖java。*包(如果他拥有jvm)

你可以做的是:

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

你仍然不是100%安全…所有的代码都可以逆向工程和算法和密钥提取,你所能做的就是使它足够困难,它将不再有吸引力。

编辑

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

有另一种可能性,你嵌入密钥在你的java应用程序…这个密钥在你所有的安装中都是静态的,那么这个密钥就不再是秘密的,它不是加密,而是混淆。

最新更新