該程序違反了移動代碼的安全編碼原則,它使用了一個 inner class。
Inner class 轉換為 Java 字節碼所采用的方式,導致它會悄然引入一些安全問題。在 Java 源代碼中,inner class 只能由封裝類來聲明它是可以訪問的,但是 Java 字節碼中并沒有 inner class 的概念,因此,編譯器必須把一個內部類聲明轉換成與 package 有同等級別的類(有權訪問源外部類)。由于內部類可以訪問其封裝類中的 private 字段,一旦某個 inner class 成為字節碼中的同等類,該編譯器便會把 inner class 訪問的 private 字段轉換成 protected 字段,這一點具有潛在的危險性。
例 1:以下 Java Applet 代碼錯誤地使用了 inner class。
public final class urlTool extends Applet {
private final class urlHelper {
...
}
...
}
[1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 492
[2] G. McGraw Securing Java.Chapter 7:Java Security Guidelines