![08be017fde951f61721889f2a36ebd96.png](https://i-blog.csdnimg.cn/blog_migrate/0c748e328268abec60e0fc446274e5b1.jpeg)
该栏目为中科天齐软件安全中心全新规划的悟空云课堂,每周五准时上线,旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。
本期主题为Switch中省略了break语句导致的代码缺陷的相关介绍。
01 什么是Switch中省略了break语句导致的代码缺陷?
break语句通常用在循环语句和switch语句中。当break用于switch语句中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。
如果程序在switch或类似构造中省略了break语句,则会导致多个条件相关联的代码被执行。当程序员只打算执行与一个条件相关的代码时,这可能会引起问题,可能导致关键代码在不该执行的情况下执行。
02 Switch中省略了break语句导致的代码缺陷构成条件有哪些?
1、switch语句的catch块中没有break指令。
03 Switch中省略了break语句导致的代码缺陷会造成哪些后果?
关键字:改变执行逻辑
可能导致执行意外的辑和其他意外的应用程序行为。
04 Switch中省略了break语句导致的缺陷防范和修补方法有哪些?
1、省略一个break语句会导致用户无法区分是忘记编写break语句还是开发人员故意为之。如果确认是故意使两种情况以上使用同一种处理逻辑,确保逻辑正确。
2、使用if语句替代该功能,这更安全。
05 Switch中缺少default导致的漏洞样例:
![f32e947d881b0598cb3874f0cfc9ad4f.png](https://i-blog.csdnimg.cn/blog_migrate/5bbc5798b2647af116dff3bb2e327322.jpeg)
用Wukong检测上述程序代码,可以发现代码中存在着switch中省略了break语句的缺陷,如下图:
![98101cf03f0ce6305778f8a721c8de73.png](https://i-blog.csdnimg.cn/blog_migrate/a4e820f2c349b6de47e979d84b485deb.jpeg)
switch中省略了break语句在CWE中被编号为CWE-484: Omitted Break Statement in Switch
更多的信息请参考CWE官网:
http://cwe.mitre.org/data/definitions/484.html