gpt4 book ai didi

c - 为什么这段代码容易受到缓冲区溢出攻击?

转载 作者:太空狗 更新时间:2023-10-29 16:14:18 27 4
gpt4 key购买 nike

int func(char* str)
{
char buffer[100];
unsigned short len = strlen(str);

if(len >= 100)
{
return (-1);
}

strncpy(buffer,str,strlen(str));
return 0;
}

此代码容易受到缓冲区溢出攻击,我正试图找出原因。我认为这与 len 被声明为 short 而不是 int 有关,但我不太确定。

有什么想法吗?

最佳答案

在大多数编译器上,unsigned short 的最大值是 65535。

高于该值的任何值都会被环绕,因此 65536 变为 0,而 65600 变为 65。

这意味着正确长度的长字符串(例如 65600)将通过检查,并溢出缓冲区。


使用size_t来存储strlen()的结果,而不是unsigned short,比较len直接编码 buffer 大小的表达式。例如:

char buffer[100];
size_t len = strlen(str);
if (len >= sizeof(buffer) / sizeof(buffer[0])) return -1;
memcpy(buffer, str, len + 1);

关于c - 为什么这段代码容易受到缓冲区溢出攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29910520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com