作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在自学 Java 的安全 API 的同时正在制作一个密码类(class)。这个类里面会有一些敏感的东西,比如加密类型之类的。如果有人有动机,所有这些都可以反射(reflection)性地检索。
我以前用过反射来绕过私有(private)变量和方法(对此并不自豪),所以我知道这是可以做到的。有没有一种方法可以完全防止反射作用于整个类——甚至其中的一部分,或者这是否违背了 Java 的——更具体地说是安全 API 的设计?
最佳答案
这称为隐蔽性安全 - 如果已知的加密算法细节会导致它不安全,那么它就已经不安全了。
不,你不能阻止人们反射(reflection)你的类(class)。在最坏的情况下,他们可以加载一个 JNI 库,该库将直接进入 JVM 堆并从那里读取内存内容(或写入它们)!如果您的代码在他人控制下的机器上运行,那么它所做的任何事情都不是真正私密的。
如果您自己编写一个 JNI 库,它可以被反编译和逆向工程(此外,这在许多司法管辖区的过去判例法中都是明确合法的)。
即使算法的工作原理为所有人所知,也只需确保算法安全,或者(更好!)使用已经编写好的实现,该实现是 Java 语言的一部分。
如果您担心的是 key Material 的泄露,请使用 Java 方法访问 keystore 。如果您真的很偏执,请将后备存储强制为 PKCS11 硬件 token 。
关于java - 有没有办法阻止类(class)被反射(reflection)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9215893/
我是一名优秀的程序员,十分优秀!