java - 私有(private)领域能提供任何实际的安全保障吗?

标签 java security reflection private-members

既然我们可以通过反射访问任何东西,无论它是字段、方法还是构造函数,那么将某些东西声明为私有(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/

相关文章:

java - 如何在 Spark Web 框架和 Velocity 模板框架中创建 for 循环?

java - 如何让selenium驱动htmlunit自动下载图像?

c++ - 如何避免.exe被杀毒软件识别为 "File might be dangerous"?

windows - 使用进程间通信时验证客户端

c# - 没有反射的 MVC4

java - 如何处理父类(super class)构造函数中的所有子类成员?

java - WebView - 无法添加窗口 - token null 不适用于应用程序

java - 连接 Netbeans 和 MySQL 但出现大整数错误

java - 在 Java 中,如何在不生成 String 对象的情况下从 HttpServletRequest header 中提取密码?

java - 如何使用反射来调用以字符串数组作为参数的私有(private)方法