【发布时间】:2010-10-26 13:46:51
【问题描述】:
我正在寻找为什么 strncpy 被认为是不安全的。有没有人有关于这方面的任何文档或使用它的漏洞利用示例?
【问题讨论】:
-
我的理解是 strcpy 是不安全的,而 strncpy 是它的安全版本。
-
虽然名字上没有_s。没有 _s 就无法保证安全...
-
如果你用的是c++,干脆不要用它,用std::string。
-
strncpy 并非设计为 strcpy 的安全版本,但它被滥用于此目的。请参阅此处了解说明:lysator.liu.se/c/rat/d11.html。现在可以争论 strncpy 是否设计错误。历史是 C 委员会的借口 :) 如果您需要安全版本的 strcpy,我建议您使用其他功能。
-
@stimms:当你说你“对 strncpy_s 更感兴趣”时,你的意思是 strncpy_s() 如何不安全,或者为什么 strncpy() 与 strncpy_s() 相比不安全? strncpy_s() 是 strncpy() 的“安全”版本,它所做的一切(与 strncpy() 不同)是要求您指定目标缓冲区的长度。