可能不安全的 strcat 使用方式¶
ID: cpp/unsafe-strcat
Kind: problem
Security severity: 9.8
Severity: warning
Precision: medium
Tags:
- reliability
- correctness
- security
- external/cwe/cwe-676
- external/cwe/cwe-120
- external/cwe/cwe-251
Query suites:
- cpp-security-extended.qls
- cpp-security-and-quality.qls
标准库函数 strcat
将源字符串追加到目标字符串。如果未检查源字符串的大小,则无法保证将数据追加到目标字符串不会导致缓冲区溢出。缓冲区溢出会导致各种问题,从段错误到安全漏洞。
建议¶
仔细检查突出显示的函数调用,以确保不会发生缓冲区溢出。为了获得更稳健的解决方案,可以考虑添加显式范围检查或使用 strncat
函数。
示例¶
void f(char *s) {
char buf[80];
strcpy(buf, "s: ");
strcat(buf, s); // wrong: buffer not checked before strcat
}
void g(char *s) {
char buf[80];
strcpy(buf, "s: ");
if(strlen(s) < 77)
strcat(buf, s); // correct: buffer size checked before strcat
}