【发布时间】:2014-10-01 18:54:36
【问题描述】:
正如securecoding site 解释的那样:
块引用 这个不兼容的代码示例显示了一个带有私有构造函数的类 Ser,表明该类外部的代码应该无法创建它的实例。该类实现 java.io.Serializable 并定义公共 readObject() 和 writeObject() 方法。因此,不受信任的代码可以通过 readObject() 获取重构的对象,并可以通过 writeObject() 写入流。
public class Ser implements Serializable {
private final long serialVersionUID = 123456789;
private Ser() {
// initialize
}
public static void writeObject(final ObjectOutputStream stream)
throws IOException {
stream.defaultWriteObject();
}
public static void readObject(final ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
}
}
如您所知,writeObject 和 readObject 方法应该被定义为私有(并且也没有 static 关键字!)并且这些方法不被 JVM 调用。
我的问题是:为什么这些方法不安全。这些方法甚至不被 JVM 调用!!我想要一个示例代码,向我展示此代码可能不安全,攻击者可以访问我们的数据。
我们将不胜感激。
【问题讨论】:
-
JVM 为什么不调用它们?是什么阻止 EvilClass 调用
Ser.readObject(myInputStream)? -
@Powerlord 看看我的回答。
标签: java serialization serializable secure-coding