程式碼安全測試第八期:Switch中缺少default導致的程式碼缺陷
1、什麼是Switch中缺少default導致的程式碼缺陷?
switch用在程式設計中,如C語言中它經常跟case一起使用,是一個判斷選擇邏輯結構。其功能就是控制流程流轉。switch語句的語法如下(switch,case,break和default是關鍵字):
switch ( 變數表示式 ) { case 常量1 :語句;break; case 常量2 :語句;break; case 常量3 :語句;break; ... case 常量n:語句;break; default :語句;break; }
當變數表示式所表達的量與其中一個case語句中的常量相符時,就執行此case語句後面的語句,並依次下去執行後面所有case語句中的語句,遇到break則中斷並跳出當前case分支執行語句。如果常量表示式的量與所有case語句的常量值都不相符,則執行default語句中的語句。
那程式碼在switch語句中沒有default語句,這可能會導致複雜的邏輯問題並由此產生安全隱患。此缺陷代表了軟體開發中的常見問題,其中並非所有可能的變數值都由給定過程考慮或處理。因此,根據不良資訊做出進一步的決策,並導致級聯故障。這種級聯故障可能會導致許多安全問題,並構成系統中的重大故障。
2、Switch中缺少default導致的程式碼缺陷構成條件有哪些?
①switch語句沒有default情況。
3、Switch中缺少default導致的程式碼缺陷會造成哪些後果?
關鍵字:改變程式執行邏輯;
①當switch中的邏輯進行資料檢查等,攻擊者可以注入不執行任何case分支的資料,則攻擊者可以繞過安全檢查,或導致程式處理邏輯上錯誤。
4、Switch中缺少default導致的缺陷防範和修補方法有哪些?
①switch語句中應該新增default標籤;
②在一些情況下,default應該作為檢查無效輸入的情況,而不應該作為一個表示假定的選項。
5、Switch中缺少default導致的漏洞樣例:
用靜態程式碼檢測分析上述程式程式碼,則可以發現程式碼中存在著case語句中沒有default 語句的缺陷,如下圖:
switch中缺少default在CWE中被編號為CWE-478: Missing Default Case inSwitch Statement
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2774200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式碼安全測試第九期:Switch中省略了break語句導致的程式碼缺陷漏洞
- 程式碼安全測試第七期:不安全的反射漏洞缺陷反射
- 程式碼安全測試第三十期:丟擲通用異常缺陷
- 程式碼安全測試第二十八期:未使用的變數缺陷漏洞變數
- 程式碼安全測試第二十六期:透過錯誤訊息導致的資訊暴露
- 測試程式碼
- 程式碼安全測試第十四期:使用已破解或危險的加密演算法導致的漏洞加密演算法
- 程式碼安全測試第二十九期:通用異常捕獲宣告缺陷漏洞
- Python物件導向之十二:程式碼測試Python物件
- 消除程式碼中的 if-else/switch-case
- 程式碼安全測試第二十五期:陣列宣告為public final static漏洞缺陷陣列
- 軟體測試與程式碼安全詳解
- 測試程式碼高亮
- VS2005中檢測和更正 C/C++ 程式碼缺陷C++
- 程式碼安全測試第十五期:跨站指令碼漏洞指令碼
- 程式碼寫作測試
- MYSQL程式碼顯示測試測試MySql
- 程式碼安全測試第十二期:LDAP注入漏洞LDA
- 程式碼測試用例指南
- 大模型在程式碼缺陷檢測領域的應用實踐大模型
- 如何在瀏覽器中測試JavaScript程式碼?瀏覽器JavaScript
- 程式碼安全測試第六期:XPath注入漏洞
- 程式碼安全 兩種程式碼漏洞
- 解決因為原生程式碼和遠端程式碼衝突,導致git pull無法拉取遠端程式碼的問題Git
- 網站安全檢測 對帝國CMS程式碼的後臺功能性安全測試網站
- CSS3 translate導致字型模糊的例項程式碼CSSS3
- 靜態應用程式安全測試如何發現網路中看不見的缺陷
- 程式碼安全測試方法有什麼?網路安全知識學習
- 程式碼缺陷解讀:通用異常捕獲宣告缺陷漏洞
- 關於反射的導致panic的一段程式碼,求解答反射
- go 程式碼覆蓋率測試Go
- 使用 xunit 編寫測試程式碼
- C# 測試程式碼#if DEBUG使用C#
- 程式碼安全測試第五期:OS命令注入漏洞
- 無程式碼的啟動速度測試 with stagesepx
- selenium最佳化後的測試程式碼
- 如何提高程式碼的可測試性
- 程式碼安全測試第二十一期:從finally塊中return漏洞