既然我们可以通过反射访问任何东西,无论它是字段、方法还是构造函数,那么将某些东西声明为私有(private)到底有什么帮助/作用呢?私有(private)字段的唯一目的是告诉其他程序员,嘿,这个字段不应该这样使用吗?
在谈论安全性时,有没有办法阻止用户访问 API(出于主题考虑,我们假设它是闭源的)私有(private)字段和 protected 字段?
最佳答案
如果您允许不受信任的代码在没有安全管理器的情况下在 JVM 中运行,它可以通过 setAccessible
关闭 private
检查。从而通过反射使私有(private)
字段和方法可用。
Java 的 SecurityManager
有一个 poor history of withstanding determined attacks因此,假设 SecurityManager
将阻止可导致任意字节码加载的坚定攻击者是不合理的。
即使 SecurityManager
成立,概念证明也显示了如何通过低级 Java API(例如序列化 API)提取 secret 。
Can a secret be hidden in a 'safe' java class offering access credentials?列出了尝试将敏感数据存储在也运行不受信任代码的 JVM 中的字段中的一些陷阱。
关于java - 私有(private)领域能提供任何实际的安全保障吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26832844/