gpt4 book ai didi

java - 防止调试器看到变量值

转载 作者:行者123 更新时间:2023-11-30 02:24:31 25 4
gpt4 key购买 nike

有没有一种方法可以配置我的 JPA(我使用 hibernate 作为实现)实体的属性,以便在调试时没有人可以看到它的值?

该属性是暂时的,出于安全原因,我不希望任何人在调试时看到它。我的应用程序的 jar/war 将被第三方使用。

最佳答案

假设您在 Oracle JVM 上运行程序,并允许人们通过调试器连接到该 JVM — 不,您无法隐藏某些字段。

调试器用于与 Java 进程对话的接口(interface)是 JDI 1,它提供了 JVM 拥有的有关代码的几乎所有信息。具体来说:

  • 如果一个人有 ObjectReference对于包含您的敏感数据的对象,他们可以获得其 ReferenceType。
  • 他们可以调用ReferenceType::allFields列出类中的所有字段,包括 transient 字段:

    All declared and inherited fields are included, regardless of whether they are hidden or multiply inherited.

  • 回到 ObjectReference,他们可以调用 ObjectReference::getValue(Field)来获取字段的值。请注意,文档没有提及任何有关 IllegalAccessException 或类似内容的内容。

即使你可以锁定某些字段,也不会对你有多大好处;当该值位于局部变量中时(无论是在读取该字段时,还是在要写入该字段时),调试器都能够看到该值。您真正想要的是锁定某些,而不是字段。这也不在 JDI 中。

<小时/>

1 实际上 JDWP在幕后,但 JDI 是建立在其之上的,在这里更容易讨论。

关于java - 防止调试器看到变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45994616/

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