描述
产品中省略了一个break语句一个开关或类似的构造,导致与之相关的代码执行多个条件。这会产生问题时,程序员只为了执行代码与一个条件有关。
扩展描述
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
其他
|
这个弱点可能导致意想不到的逻辑执行和其他异常的应用程序行为。 |
|
利用的可能性
示范例子
示例1
在这两个例子中,根据月打印一条消息传递到函数:
公共空间printMessage (int) {
开关(月){
案例1:打印(" 1 "); 案例2:印刷(“2”); 案例3:印刷(3月); 案例4:打印(4月); 案例5:打印(“可能”); 案例6:打印(6月); 案例7:打印(7月); 例8:打印(8月); 案例9:打印(9月); 例10:打印(10月); 例11:打印(11月); 例12:打印(12月);
} println(“是一个伟大的月”);
}
空白printMessage (int) {
开关(月){
案例1:printf (" 1 "); 案例2:printf (" 2 "); 案例3:printf (3); 案例4:printf(4月); 案例5:printff(“可能”); 案例6:printf (" 6 "); 案例7:printf (" 7 "); 例8:printf (" 8 "); 案例9:printf(9月); 例10:printf (" 10 "); 例11:printf (" 11 "); 例12:printf(12月);
} printf("是一个伟大的月”);
}
这两个示例不使用break语句在每种情况下,导致意想不到的失败行为。例如,称“printMessage(10)”将导致文本“OctoberNovemberDecember是一个伟大的月”打印出来。
潜在的缓解措施
实施阶段:
省略break语句,这样你可能失败往往是区别一个错误,因此应该避免。如果你需要使用失败功能,确保您已经清楚地记录了这个在switch语句中,并确保你有检查所有的逻辑可能性。 |
实施阶段:
省略的功能break语句可以澄清一个if语句。这种方法更安全。 |
弱点Ordinalities
Ordinality |
描述 |
主 |
(其他弱点的弱点存在独立的) |
间接 |
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测) |
检测方法
白盒子
遗漏的break语句可能是故意的,为了支持fallthrough。因此自动化检测方法可能是错误的。语义理解预期产品的行为是需要解释的代码是否正确。 |
黑盒
因为这个弱点是与代码相关的构造,是区别其他错误,产生相同的行为。 |
分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
扣 |
|
|
省略break语句 |
软件故障模式 |
SFP4 |
|
不受控制的状态条件 |
引用
|
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第七章“Switch语句”,337页。1版。艾迪生卫斯理》2006。 |
|