我们正在编写一个Java程序,该程序将密码保存在内存中。不幸的是,用户可以轻易地使用jconsole或jmap创建堆转储文件并打开它以查找密码。我认为jconsole使用本地套接字连接jvm。请问,是否有任何方法可以禁用jmx,即使对于本地用户也是如此?是否有任何方法可以完全禁用堆转储?由于用户可以访问内存段,因此无论如何都可以访问密码。但是,我想禁用标准的操作方式以尽可能增加操作成本。
最终,我找到了一个禁用jconsole连接的解决方案。这也可以防止jmap创建转储文件。我在这里找到了解决方案。我在这里引用答案:“您可以通过使用-XX:+DisableAttachMechanism选项运行来防止类似jconsole等工具的连接。请注意,该选项未得到记录/支持,但应该能够实现您想要的功能。话虽如此,即使有了这个选项,也��法阻止您连接gdb或其他基于调试/proc的程序。”然而,很明显,内存段可以在本地访问。但是,有人知道一种直接访问内存并进行标准内存转储的工具吗?
将最大连接数设置为零会关闭JMX。-Dsun.rmi.transport.tcp.maxConnectionThreads=0 如果您仍需要统计数据,只需阅读相应的hsperfdata_*文件即可。编辑: 我在github上发布了hsperf munin插件。