出于安全考虑,我需要找到一种方法来限制 JVM 将运行哪些文件。我有大约 5 个可以运行的 jars,没有其他东西可以在 JVM 上运行。这是由于某些特定于域的限制,必须将特定权限分配给 JVM,但这些权限不应该对任何想要编写和执行 java 文件的人可用。
我觉得可能有某种功能可以在 JVM 中仅运行受信任/签名的代码,但我无法找到任何相关信息。
如果有人有任何想法,那就太好了!
如果您不需要能够从其他 JAR 读取代码,您可以使用SecurityManager来防止读取任何其他 JAR,或从目录加载类。您还需要限制共享库的反射和加载,以防止手动加载类。
我认为这不是那么简单...如果您不完全控制用户站,您将无法使用 SM 保护 java。例如,原始类加载器加载不受 SM 检查和许多其他验证的类......所以用户可以在 bootclasspath 中添加一个将拥有所有权限的库......(例如:java 中的 classes 文件夹或 lib 文件夹安装,如果他拥有 jvm,他甚至可以覆盖 java.* 包)
你可以做的是:
而且您仍然不是 100% 安全...所有代码都可以进行逆向工程并提取算法和密钥,您所能做的就是让它变得足够困难,使其不再具有吸引力。
编辑
我认为你可能有一个很大的设计问题。也就是说,如果文件加密是用户驱动的,那么用户知道加密密钥,所有安全性都保留在该密钥中,而不是您的代码中。任何人都可以尝试解密它,但只有拥有有效密钥的人才能解密。如果是这种情况,那么您的代码不需要任何特殊处理。
还有另一种可能是您在您的 java 应用程序中嵌入了密钥......并且这个密钥在您的所有安装中都是静态的,那么这个密钥不再是秘密的,它不是加密而是混淆。