gpt4 book ai didi

c - C中的recv()是否可能存在缓冲区溢出?

转载 作者:行者123 更新时间:2023-11-30 18:01:48 26 4
gpt4 key购买 nike

我想知道我的应用程序中是否存在缓冲区溢出。例如我有这样的代码:

    enum { BUFSIZE = 1024};
char username[this->BUFSIZE];
memset(username,0,BUFSIZE);
char password[this->BUFSIZE];
memset(password,0,BUFSIZE);

send(client_fd, "Login: ", BUFSIZE, 0);
recv(client_fd,username,sizeof(username),0)

恶意攻击者可以输入超过 1024 个字符并执行 bof 操作吗?

最佳答案

send(client_fd, "登录:", BUFSIZE, 0);

-- 对于此语句,send 将尝试发送 BUFSIZE 字节,尽管您的字符串只是“Login:”。 send 本质上并不尝试理解“C”字符串。它只识别字节流。因此,您的发送语句不正确。

recv(client_fd,用户名,sizeof(用户名),0)

-- 在recv的情况下,虽然你提到了“sizeof(username)”,但这并不意味着它会返回“sizeof(username)”字节,返回的字节数可以通过返回值找到接收量在不检查recv的返回值的情况下,切勿尝试解释传递给recv的缓冲区的内容。但是,指定 sizeof(username) 可确保即使网络缓冲区中存在更多字节,recv 调用也不会返回超过 sizeof(username) 字节。

关于c - C中的recv()是否可能存在缓冲区溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565399/

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