为什么Java Singleton需要防止反射攻击

时间:2017-05-25 01:49:31

标签: java reflection singleton

Effective Java 2nd Enum Implementation 描述为在Java中实现Singleton的最佳实践。

但该实现对静态持有者实现的优势在于enum可以防止反射攻击。

所以,有一个问题:为什么我们需要防止单身人士的反思攻击?

Java Singleton的其他实现只是解决了多线程延迟初始化的问题。

这些问题将经常出现在日常开发中,但反射攻击似乎更像是一个安全问题

如果攻击者可以攻击并破解你的程序,他和她可以做任何他想做的事情,似乎没有必要打破单身人士。

1 个答案:

答案 0 :(得分:2)

@Wafer Li,理论上反思可以创建非enum单例的第二个实例,因此可以反序列化。这些不是"攻击"但客户端代码可以打败单身的方式。 API编写的整个是为了保证记录的行为。如果一个人在保证中留下如此巨大的漏洞,为什么还要单独写一个单身?

此外,懒惰的单例初始化是没用的。无意义。静态持有者是多余的,只是一大堆代码。

那么为什么要为单身人士抵制简单,优雅,完全实施,标准,最佳实践enum

为什么?