应该使类不可被复制。Java的类复制机制答应攻击者不运行构建函数就实例化某个类。要使类不可被复制,只要在每个类里定义如下方法: public final void clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); }
假如确实需要使类可被复制,那么可以采用几个保护措施来防止攻击者重新定义复制方法。假如是定义自己的复制方法,只需要使它是确定的。假如不是定义自己的复制方法,至少可以通过增加如下内容来防止复制方法被恶意地重载: public final void clone() throws java.lang.CloneNotSupportedException { super.clone(); }
应该使类不可序列化。系列化运行攻击者看到对象的内部状态,甚至私有部分。要防止这一点,需要在类里增加如下方法: PRivate final void writeObject(ObjectOutputStream out) throws java.io.IOException { throw new java.io.IOException("Object cannot be serialized"); }