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