安全漏洞:这段代码中的错误是什么?

时间:2015-04-22 04:17:00

标签: c security integer-overflow

我自己正在阅读this book,只是为了好玩,并且遇到了以下问题:

  

此代码存在安全漏洞;你能找到并解决它吗? :

  bool isValidAddition(unsigned short x, unsigned short y) 
 {
     if(x + y < x)
         return false;
     else 
         return true;
 }

有人可以帮助我,识别漏洞吗?

1 个答案:

答案 0 :(得分:0)

根据C Standard

,我们知道以下几点是正确的
  
      
  • sizeof(短)&lt; = sizeof(int)&lt; = sizeof(long)
  •   
  • sizeof(短)&gt; = 2个字节,sizeof(int)&gt; = 2个字节,sizeof(长)&gt; = 4个字节
  •   
  • 算术表达式中使用的操作数数据类型的隐式整数提升由编译器
  • 完成   

所以在上面的代码片段中执行以下操作:

更改

if(x + y < x) 

if((unsigned short)(x + y) < x) 

如果int是4(或&gt; 2)字节

,这将是worrk

希望这会有所帮助:)