我们正在编写一个将密码保存在内存中的java程序。不幸的是,用户可以轻松地使用jconsole或jmap创建堆转储文件并打开它以查找密码。我认为jconsole使用本地套接字连接jvm。我想知道,有没有办法甚至为本地用户禁用jmx?有没有办法完全禁用堆转储?由于用户可以访问内存段,因此无论如何都可以访问密码。但是,我想禁用标准的方法来使行动尽可能昂贵。
答案 0 :(得分:5)
最后,我找到了一个禁用jconsole连接的解决方案。它还可以防止jmap创建转储文件。我找到了解决方案here。我也在这里引用答案:
你可以防止诸如此类的工具 jconsole和其他人从连接 与...一起跑 -XX:+ DisableAttachMechanism选项。请注意,此选项不是 记录/支持,但应该做 你想要什么。即便如此 这没有什么可以阻止你 连接gdb或其他调试/ proc 基于程序
但是,很明显可以在本地访问内存段。但是,是否有人知道使用直接访问内存进行标准内存转储的工具?
答案 1 :(得分:2)
将最大连接数设置为零会关闭JMX
-Dsun.rmi.transport.tcp.maxConnectionThreads=0
如果您仍需要统计数据,请阅读相应的hsperfdata_ *文件
编辑: 我在github上发布了我的hsperf munin plugin。