應(yīng)該使類不可被復(fù)制。Java的類復(fù)制機制答應(yīng)攻擊者不運行構(gòu)建函數(shù)就實例化某個類。要使類不可被復(fù)制,只要在每個類里定義如下方法: public final void clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); }
假如確實需要使類可被復(fù)制,那么可以采用幾個保護措施來防止攻擊者重新定義復(fù)制方法。假如是定義自己的復(fù)制方法,只需要使它是確定的。假如不是定義自己的復(fù)制方法,至少可以通過增加如下內(nèi)容來防止復(fù)制方法被惡意地重載: public final void clone() throws java.lang.CloneNotSupportedException { super.clone(); }
應(yīng)該使類不可序列化。系列化運行攻擊者看到對象的內(nèi)部狀態(tài),甚至私有部分。要防止這一點,需要在類里增加如下方法: PRivate final void writeObject(ObjectOutputStream out) throws java.io.IOException { throw new java.io.IOException("Object cannot be serialized"); }