可能的重复项:
为什么 strncpy 不安全?
strncpy()
有哪些安全问题:
function foo(char * param) {
char local[100];
/* do stuff */
strncpy(local, param, strlen(param));
/* do more stuff */
}
通常,要strncpy(3)
的最大长度 (3'rd) 参数是目标的大小,而不是源的大小。将传输限制在源的大小确实没有意义,因为这是使用更危险的普通strcpy(3)
传输的最大值。
而且,要回答这个问题,问题在于这不是内存安全操作,因此攻击者可以提供比缓冲区更长的字符串,这将覆盖堆栈上的代码,并且如果精心安排,可以执行攻击者的任意代码。