我在某个地方找到了这个代码,它用于字符串检查验证中的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;
}
}
答案 0 :(得分:0)
简单解释:它是经典的缓冲区溢出/后门。
如果输入的字符串长度小于correctWord
的字符串长度,则表示您正在读取input
的开头。比较很可能仍会失败,但最重要的是:它可能会触发访问冲突。或者更糟糕的是,input
之前的内存是否受到攻击者控制,尽管没有实际匹配,但这可能会产生true
。
如果input
足够长已经在评论中解释了会发生什么。