如何解决Flawfinder错误-内部缓冲区溢出如何限制字符串输入的大小并防止其溢出?
我有以下代码:
void parseOptions(int argc,char* argv[]) {
std::string mob;
int option,index;
struct option long_options[] = {{"version",no_argument,'V'},{"mobile-interface",required_argument,'m'},{0,0}};
while ((option = getopt_long(argc,argv,"Vm:",long_options,&index)) != -1) {
switch (option) {
case 'V':
printVersion();
break;
case 'm':
if (strlen(optarg) == HASHED_MOB_SIZE) {
mob = optarg;
}
break;
default:
std::cerr << "Getopt switch default case shouldn't be reached... aborting program.\n";
exit(ERR_GETOPT_FAILURE);
}
}
}
我运行Flawfinder
并收到以下错误消息:
main.cpp:48:[3](缓冲区)getopt_long: 一些较旧的实现无法防止内部缓冲区溢出 (CWE-120,CWE-20)。检查安装的执行情况,或限制大小 所有字符串输入。
如何限制字符串输入大小?
解决方法
所以 Flawfinder
是对的。
getopt
中存在一个漏洞:CVE-1999-0966。
Solaris getopt 中的缓冲区溢出问题允许本地用户通过长 argv[0] 获得 root 权限。
我的解决方案是验证 argc
是否大于 1 并且 argv[0]
不会太长。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。