我是C的新手,我想知道指针是否有可能被像strcpy()这样的易受攻击的c函数溢出。我在源代码中看到了很多,它是一种避免缓冲区溢出的方法吗?
答案 0 :(得分:1)
是的。这实际上是缓冲区溢出漏洞的典型原因。避免溢出缓冲区的唯一方法是确保不执行任何可能导致溢出的操作。在strcpy
的情况下,解决方案是使用strncpy
,其中包括要复制字符串的缓冲区的大小。
答案 1 :(得分:1)
当然,如果你没有为缓冲区分配足够的空间,那么你当然可以:
char* ptr = (char*)malloc(3);
strcpy(ptr, "this is very, very bad"); /* ptr only has 3 bytes allocated! */
然而,真正糟糕的是这段代码可以在不给你任何错误的情况下工作,但它可能会覆盖一些可能导致你的程序稍后爆炸的内存,看似随机,你可能不知道为什么。这些是沮丧的小时数(有时甚至是天)的来源,任何花费任何大量时间撰写C
的人都会告诉你。
这就是为什么使用C
,你必须非常小心这些事情,并对你的代码进行双倍,三倍,第二度检查。之后,再次检查。
答案 2 :(得分:0)
其他一些方法
#define MAX_LENGTH_NAME 256
foo()
{
char a[MAX_LENGTH_NAME+1]; // You can also use malloc here
strncpy(a,"Foxy",MAX_LENGTH_NAME);
snprintf(a,MAX_LENGTH_NAME,"%s","Foxy");
}
所以很高兴知道已分配内存的大小,然后使用这些调用来避免缓冲区溢出。 对已经编写的代码进行静态分析可能会指出这些类型的错误,您也可以对其进行更改。