悟空云課堂 | 代碼安全第九期:Switch中省略了break語句導(dǎo)致的代碼缺陷

該欄目為中科天齊全新規(guī)劃的悟空云課堂,旨在科普軟件安全相關(guān)知識(shí),助力企業(yè)有效防范軟件安全漏洞,提升網(wǎng)絡(luò)安全防護(hù)能力。本期主題為Switch中省略了break語句導(dǎo)致的代碼缺陷的相關(guān)介紹。
一、什么是Switch中省略了break語句導(dǎo)致的代碼缺陷?
break語句通常用在循環(huán)語句和switch語句中。當(dāng)break用于switch語句中時(shí),可使程序跳出switch而執(zhí)行switch以后的語句;如果沒有break語句,則會(huì)從滿足條件的地方(即與switch(表達(dá)式)括號(hào)中表達(dá)式匹配的case)開始執(zhí)行,直到switch結(jié)構(gòu)結(jié)束。
如果程序在switch或類似構(gòu)造中省略了break語句,則會(huì)導(dǎo)致多個(gè)條件相關(guān)聯(lián)的代碼被執(zhí)行。當(dāng)程序員只打算執(zhí)行與一個(gè)條件相關(guān)的代碼時(shí),這可能會(huì)引起問題,可能導(dǎo)致關(guān)鍵代碼在不該執(zhí)行的情況下執(zhí)行。
二、Switch中省略了break語句導(dǎo)致的代碼缺陷構(gòu)成條件有哪些?
1、switch語句的catch塊中沒有break指令。
三、Switch中省略了break語句導(dǎo)致的代碼缺陷會(huì)造成哪些后果?
關(guān)鍵字:改變執(zhí)行邏輯
可能導(dǎo)致執(zhí)行意外的輯和其他意外的應(yīng)用程序行為。
四、Switch中省略了break語句導(dǎo)致的缺陷防范和修補(bǔ)方法有哪些?
1、省略一個(gè)break語句會(huì)導(dǎo)致用戶無法區(qū)分是忘記編寫break語句還是開發(fā)人員故意為之。如果確認(rèn)是故意使兩種情況以上使用同一種處理邏輯,確保邏輯正確。
2、使用if語句替代該功能,這更安全。
五、Switch中缺少default導(dǎo)致的漏洞樣例:

用Wukong軟件檢測(cè)上述程序代碼,可以發(fā)現(xiàn)代碼中存在著switch中省略了break語句的缺陷,如下圖:

switch中省略了break語句在CWE中被編號(hào)為CWE-484: Omitted Break Statement in Switch
