Switch中省略了break语句及缺少default导致的代码缺陷
2021-06-28 16:35:33 Author: www.secpulse.com(查看原文) 阅读量:166 收藏

什么是Switch中省略了break语句导致的代码缺陷?

break语句通常用在循环语句和switch语句中。当break用于switch语句中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。

如果程序在switch或类似构造中省略了break语句,则会导致多个条件相关联的代码被执行。当程序员只打算执行与一个条件相关的代码时,这可能会引起问题,可能导致关键代码在不该执行的情况下执行。

Switch中省略了break语句导致的代码缺陷构成条件有哪些?

①switch语句的catch块中没有break指令。

Switch中省略了break语句导致的代码缺陷会造成哪些后果?

关键字:改变执行逻辑

可能导致执行意外的辑和其他意外的应用程序行为。

Switch中省略了break语句导致的缺陷防范和修补方法有哪些?

省略一个break语句会导致用户无法区分是忘记编写break语句还是开发人员故意为之。如果确认是故意使两种情况以上使用同一种处理逻辑,确保逻辑正确。

②使用if语句替代该功能,这更安全。

Switch中缺少default导致的漏洞样例:

3.png

用悟空静态代码检测工具分析上述程序代码,可以发现代码中存在着switch中省略了break语句的缺陷,如下图:

4.png

switch中省略了break语句在CWE中被编号为CWE-484: Omitted Break Statement in Switch

什么是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语句,这可能会导致复杂的逻辑问题并由此产生安全隐患。此缺陷代表了软件开发中的常见问题,其中并非所有可能的变量值都由给定过程考虑或处理。因此,根据不良信息做出进一步的决策,并导致级联故障。这种级联故障可能会导致许多安全问题,并构成系统中的重大故障。

Switch中缺少default导致的代码缺陷构成条件有哪些?

①switch语句没有default情况。

Switch中缺少default导致的代码缺陷会造成哪些后果?

关键字:改变程序执行逻辑;

当switch中的逻辑进行数据检查等,攻击者可以注入不执行任何case分支的数据,则攻击者可以绕过安全检查,或导致程序处理逻辑上错误。

Switch中缺少default导致的缺陷防范和修补方法有哪些?

switch语句中应该添加default标签;

②在一些情况下,default应该作为检查无效输入的情况,而不应该作为一个表示假定的选项。

Switch中缺少default导致的漏洞样例:

3.jpg

用悟空静态代码检测工具分析上述程序代码,则可以发现代码中存在着case语句中没有default语句的缺陷,如下图:

4.jpg

switch中缺少default在CWE中被编号为CWE-478: Missing Default Case inSwitch Statement

本文作者:天齐软件测评中心

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/161577.html


文章来源: https://www.secpulse.com/archives/161577.html
如有侵权请联系:admin#unsafe.sh