C语言的字符串操作函数(如strcpy, strcat和sprintf等)由于程序员们的不当使用,造成了很多由缓冲区溢出引发的安全漏洞。为此,C语言标准引入了“相对”更加“安全”的带缓冲区大小的新版本字符串操作函数:strncpy,strncat和snprintf等。
但是应用这些函数就真的“安全”了吗?
个人认为,这些函数只是“强制”程序员用户关注潜在的缓冲区溢出问题,至于安全本身还是要依靠程序员来解决。如果不了解这些函数的细节,我们仍有可能掉入“陷阱”,那可能真是“按倒葫芦起了瓢”。下面我们看个例子:
#include <stdio.h>
int main(int argc, char *argv[])
{
char buf[16];
strncpy(buf, argv[1], sizeof(buf));
printf("%s\n", buf);
return 0;
}
|
咋一看,这个程序员的安全意识还不错嘛!不要着急下结论,实际测试下:
xiaosuo@gentux test $ ./a.out abcdefghijklmnoptrst abcdefghijklmnop
阅读(1704) | 评论(2) | 转发(0) |
|