CWE-480: Use of Incorrect Operator(使用不正确的操作符)

 ID: 480

类型:基础
结构:简单

状态:草稿

描述

程序员不小心使用了错误的运算符,从而以安全相关的方式更改了应用程序逻辑。

扩展描述

这些类型的错误通常是打字错误的结果。

相关视图

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

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

引入模式

阶段

说明

实现

 

应用平台

语言

C (有时出现)

C++ (有时出现)

Perl (有时出现)

Class: 语言无关 (出现的可能性不确定)

后果

范围

冲击

可能性

其它

技术冲击: 修改执行逻辑

这个弱点会导致执行意外的逻辑和其他意外的应用程序行为。

 

被利用的可能性:

示例

例1

下面的C/C++和C++示例试图验证INT输入参数相对于整数值100。(问题代码)

Example Language:

int isValid(int value) {

if (value=100) {

printf("Value is valid\n");
return(1);

}
printf("Value is not valid\n");
return(0);

}

(问题代码)

Example Language: C# 

bool isValid(int value) {

if (value=100) {

Console.WriteLine("Value is valid.");
return true;

}
Console.WriteLine("Value is not valid.");
return false;

}

但是,在if语句中计算的表达式使用赋值运算符“=”,而不是比较运算符“==”。使用赋值运算符而不是比较运算符的结果将导致局部重新分配int变量,并且if语句中的表达式将始终计算为表达式右侧的值。这将导致输入值未正确验证,从而导致意外结果。

例2

下面的C/C++示例展示了一个简单的堆栈,包括用于从堆栈中添加和移除整数值的方法。该示例使用指针向堆栈数组变量添加和删除整数值。(问题代码)

Example Language:

#define SIZE 50
int *tos, *p1, stack[SIZE];

void push(int i) {

p1++;
if(p1==(tos+SIZE)) {


// Print stack overflow error message and exit

}
*p1 == i;

}

int pop(void) {

if(p1==tos) {


// Print stack underflow error message and exit

}
p1--;
return *(p1+1);

}

int main(int argc, char *argv[]) {


// initialize tos and p1 to point to the top of stack
tos = stack;
p1 = stack;
// code to add and remove items from stack
...
return 0;

}

但是,此表达式使用比较运算符“==”,而不是赋值运算符“=”。使用比较运算符而不是赋值运算符的结果会导致将错误的值输入堆栈,并可能导致意外的结果。

种属

关系

类型

ID

名称

属于

747

CERT C Secure Coding Standard (2008) Chapter 14 - Miscellaneous (MSC)

属于

871

CERT C++ Secure Coding Section 03 - Expressions (EXP)

属于

883

CERT C++ Secure Coding Section 49 - Miscellaneous (MSC)

属于

884

CWE Cross-section

属于

977

SFP Secondary Cluster: Design

属于

1157

SEI CERT C Coding Standard - Guidelines 03. Expressions (EXP)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值