C endWord验证;你会如何解释这段代码?

时间:2018-04-30 16:36:18

标签: c validation

我在某个地方找到了这个代码,它用于字符串检查验证中的lastword。它运作良好,但你会如何解释呢?

int endWord(char input[], char correctWord[])
{
   if(strlen(input) < strlen(correctWord)) return 0;
   else
   {
       if(strcmp(input + (strlen(input) - strlen(correctWord)), correctWord) == 0) return 1;
       else return 0;
   }
}

1 个答案:

答案 0 :(得分:0)

简单解释:它是经典的缓冲区溢出/后门。

如果输入的字符串长度小于correctWord的字符串长度,则表示您正在读取input的开头。比较很可能仍会失败,但最重要的是:它可能会触发访问冲突。或者更糟糕的是,input之前的内存是否受到攻击者控制,尽管没有实际匹配,但这可能会产生true

如果input足够长已经在评论中解释了会发生什么。