阻止调试器查看变量值

时间:2017-09-01 06:44:50

标签: java security reflection permissions securitymanager

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

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

1 个答案:

答案 0 :(得分:2)

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

调试器将用于与Java进程通信的接口是JDI 1 ,它提供了JVM对您的代码的几乎所有信息。具体做法是:

  • 如果某人对包含您的敏感数据的对象有ObjectReference,则可以获取其ReferenceType。
  • 他们可以致电ReferenceType::allFields列出所有字段,包括类中的瞬态字段:
      

    包括所有声明和继承的字段,无论它们是隐藏还是多重继承。

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

即使你可以锁定某些领域,它也不会对你有好处;调试器能够在局部变量中查看值(当您读取字段时,或者当您要写入字段时)。你真正想要的是锁定某些,而不是字段。而且这也不在JDI中。

1 实际上JDWP实际上是The picture shows how to find the path,但是JDI建立在这之上,在这里更容易讨论。