5

Switch中省略了break语句及缺少default导致的代码缺陷

 3 years ago
source link: https://www.secpulse.com/archives/161577.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Switch中省略了break语句及缺少default导致的代码缺陷

什么是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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK