CWE-500:宣告為public static的域沒有標記final缺陷簡介

zktq2021發表於2021-08-09

在一個類中,非靜態成員變數對每一個物件都會有一個特定的值,在初始化非靜態變數的時候是不分配記憶體的,只有創立物件後才會分配,而且不同物件之間的同名非靜態變數是可以不同的;當用static修飾變數,一個類的所有物件都共享這個屬性,若不加final,當一個物件對static變數修改的時候,這個類的所有物件的這個屬性都會改變。

一、什麼是public static的域沒有標記final缺陷?

物件包含未標記為final的公共靜態欄位,這可能允許以意外方式對其進行修改。

二、public static的域沒有標記final缺陷構成條件有哪些?

例如:

public class SomeAppClass {

public static String appPropertiesFile = "app/Application.properties";

...

}

具有未標記為final的public static可能會允許該變數以應用程式不希望的方式更改。在此示例中,可以修改String變數以指示不存在的屬性檔案上的其他內容,這可能導致應用程式崩潰或導致意外行為。

三、public static的域沒有標記final缺陷的後果有哪些?

應用程式中的任何類都可以在沒有訪問器的情況下讀取公共靜態變數,並在沒有變數器的情況下對其進行更改。

四、public static的域沒有標記final缺陷樣例:

package Static_Field_Not_Final;

public class Static_Field_Not_Final

{

/* FLAW: public static fields should be marked final */

public static String defaultError = "The value you entered was not understood. Please try again."; // bad 非final的public static欄位

public static final String defaultRight = "GOOD"; // good 非final的public static欄位

public void bad() { }

}

使用悟空軟體原始碼靜態檢測工具進行程式碼檢測,檢測結果如下:

悟空靜態程式碼檢測

“宣告為public static的域沒有標記final缺陷”在CWE中編號為:CWE-500: Public Static Field Not Marked Final


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2785942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章