gpt4 book ai didi

java - 是否可以不安全地访问 JVM 未使用的对象?

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:24 24 4
gpt4 key购买 nike

我有一个问题要问这里的 JVM 内部专家。

在 Java 虚拟机中,对象内容存储在堆内存中,直到它们被垃圾收集。通常,GC 在没有更多可用内存时发生,因此如果 JVM 有大量可用空间,则可能需要很长时间才能发生 GC。

从安全的角度来看,您能想象出一种方法可以让某人访问 JVM 内存并获取堆空间的转储,从而可以在其中找到等待 GC 的未使用对象吗?

我的意思是:如果我的程序处理敏感数据,并且我以一种在执行涉及这些敏感对象的过程后不会留下对这些敏感对象的引用的方式编写我的应用程序,那么恶意软件或系统管理员是否可以访问堆空间并对其进行分析以找到这些敏感数据?

在内存管理和垃圾收集方面,使用 Scala 有什么改变吗?

最佳答案

系统管理员当然可以访问 JVM 内存。作为最后的资源,他/她可以转储 JVM 进程内存并检查它。事实上,您必须信任您将在其上执行的平台。

您可以通过在 String(不可变的)上使用 char[] 并用在离开您定义它们的范围之前为零,但会有一个时间跨度,在这个时间跨度中,此类数据以明文形式提供。

在较低级别,您可以加密内存,这仍会在某处留下未加密的 key 。您还可以防止内存页面被交换,这无论如何都不会阻止转储,并且如果您的应用程序使用了 RAM 的相关部分并且系统并未完全用于它,则可能会对性能造成不良影响。无论如何,这些解决方案只能保护静态数据,据我所知,没有 JVM 实现它们。

使用 Scala 不会有太大变化,因为这是 JVM 特定的问题,与编译成字节码的源语言无关。

关于java - 是否可以不安全地访问 JVM 未使用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21700603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com