該程序違反了移動代碼的安全編碼原則,它將 finalize() 方法聲明為 public。
除非在 finalize() 的實現方法內部調用 super.finalize(),否則請不要顯式地調用 finalize。在移動代碼中,手動垃圾回收這種帶有錯誤傾向的操作會威脅到系統的安全,由于 finalize() 的聲明中包含對 public 訪問,因此會造成攻擊者的惡意調用。如果您按其最初設計使用 finalize(),則應首先聲明 finalize() 包含 protected 訪問權限。
例 1:以下 Java Applet 代碼錯誤地聲明了一種 public finalize() 方法。
public final class urlTool extends Applet {
public void finalize() {
...
}
...
}
[1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 583
[2] G. McGraw Securing Java.Chapter 7:Java Security Guidelines