CWE-464: Addition of Data Structure Sentinel(添加数据结构哨兵)

 

 ID: 464

类型:基础
结构:简单

状态:未完成

 

描述

意外添加数据结构哨兵会导致严重的编程逻辑问题。

扩展描述

数据结构哨兵通常用来标记数据的结构。一个常见的例子是字符串结尾的空字符或一个特殊的标识符来标记链表的末尾。允许轻松访问此类控制数据是危险的。因此,重要的是要防止增加或修改哨兵。

关联视图

与“研究层面”视图(CWE-1000)相关

与“开发层面”视图(CWE-699)相关

引入模式

阶段

说明

架构与设计

 

实现

 

应用平台

语言

C (出现的可能性不确定)

C++ (出现的可能性不确定)

后果

范围

冲击

可能性

完整性

技术冲击: 修改应用数据

通常,此错误会导致数据结构因截断数据而无法正常工作。

 

被利用的可能性:

示例

例1

下面的示例将一些字符值分配给一个字符列表,并分别打印,然后作为字符串打印。第三个字符的值是从用户输入中提取并转换为int的整数。

(问题代码)

Example Language:

char *foo;
foo=malloc(sizeof(char)*5);
foo[0]='a';
foo[1]='a';
foo[2]=atoi(getc(stdin));
foo[3]='c';
foo[4]='\0'
printf("%c %c %c %c %c \n",foo[0],foo[1],foo[2],foo[3],foo[4]);
printf("%s\n",foo);

第一个print语句将打印由空格分隔的每个字符。但是,如果getc从stdin中读取非整数,那么atoi将不会进行转换并返回0。当foo打印为字符串时,字符foo[2]处的0将充当空终止符,foo[3]将永远不会打印。

应对措施

阶段: 实现; 架构与设计

封装用户与数据哨兵交互。验证用户输入以验证哨兵不存在。

阶段: 实现

正确的错误检查可以降低无意中将哨兵值引入数据的风险。例如,如果解析函数失败或遇到错误,它可能返回与哨兵相同的值。

阶段: 架构与设计

使用抽象库来抽象危险的API。这不是一个完整的解决方案。

阶段: 操作

使用操作系统级别的预防功能。这不是一个完整的解决方案。

种属

关系

类型

ID

名称

属于

741

CERT C Secure Coding Standard (2008) Chapter 8 - Characters and Strings (STR)

属于

875

CERT C++ Secure Coding Section 07 - Characters and Strings (STR)

属于

977

SFP Secondary Cluster: Design

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值