CWE-500:宣告為public static的域沒有標記final缺陷簡介
在一個類中,非靜態成員變數對每一個物件都會有一個特定的值,在初始化非靜態變數的時候是不分配記憶體的,只有創立物件後才會分配,而且不同物件之間的同名非靜態變數是可以不同的;當用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 陣列宣告為public final static缺陷陣列
- 程式碼安全測試第二十五期:陣列宣告為public final static漏洞缺陷陣列
- Java中static、final、static final的區別Java
- java中的Static、final、Static final各種用法Java
- 變數沒有宣告的錯誤變數
- Java中可以宣告一個類為Static嗎?Java
- Java中final與static final的區別Java
- static/final/常量模式模式
- 為什麼Java的main方法必須是public static void?JavaAI
- const,static,extern簡介
- 【目標區域捕獲-2】目標區域捕獲簡介
- 巨集,static、const 、extern簡介
- final修飾和static final修飾的區別
- 內部Fragment設定為public static和checkReleaseBuilds false與abortOnError falseFragmentUIFalseError
- 為什麼PHP檔案一般沒有結束標記PHP
- private,public,protected,static不可以修飾區域性變數,方法裡的變數變數
- 反射修改 static final 變數反射變數
- 目標沒有實現?那是因為你沒有做好計劃管理
- ASP.NET Razor – 標記簡介ASP.NET
- java中的static和final關鍵字Java
- javascript變數宣告簡單介紹JavaScript變數
- Java中static、final用法小結Java
- 程式碼缺陷解讀:通用異常捕獲宣告缺陷漏洞
- JavaScript實現類的private、protected、public、static以及繼承JavaScript繼承
- javascript變數宣告提升簡單介紹JavaScript變數
- this,構造器,static,final,單例模式單例模式
- php class中public,private,protected,static的區別,以及例項PHP
- javascript沒有塊級作用域JavaScript
- js宣告陣列的幾種方式簡單介紹JS陣列
- 漏洞分析——變數缺陷漏洞及通用異常捕獲宣告缺陷漏洞變數
- laravel 定義模型的區域性查詢作用域方法沒有PhpStorm沒有程式碼提示Laravel模型PHPORM
- Java基礎——final和static關鍵字Java
- Java關鍵字static、final使用小結Java
- java final和static關鍵字學習Java
- 徹底搞定Java關鍵字final、staticJava
- java基礎----->Static 和 Final 關鍵字Java
- Java關鍵字final、static使用總結Java
- Django官方為什麼沒有標準專案結構Django