【问题标题】:C endWord validation; how would you explain this code?C endWord 验证;你会如何解释这段代码?
【发布时间】:2018-04-30 16:36:17
【问题描述】:

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

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;
   }
}

【问题讨论】:

  • 如果correctWord 内容与input 中的最后一个子字符串匹配,则计算得出它必须在input 中的位置,即strlen(correctWord) 字符之前input 的终止符。但如果strlen(correctWord) > strlen(input) 会失败。
  • 感谢您的回答
  • 当你删除问题时,我正在写一个更完整的答案!
  • 我觉得理解就够了
  • 如果问题在准备好之前就消失了,这让我不愿意花时间回答。

标签: c validation


【解决方案1】:

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

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

如果input 足够长会发生什么,已经在 cmets 中进行了解释。

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多