函數(shù) |
嚴(yán)重性 |
解決方案 |
gets |
最危險(xiǎn) |
使用 fgets(buf, size, stdin)。這幾乎總是一個(gè)大問(wèn)題! |
strcpy |
很危險(xiǎn) |
改為使用 strncpy。 |
strcat |
很危險(xiǎn) |
改為使用 strncat。 |
sprintf |
很危險(xiǎn) |
改為使用 snprintf,或者使用精度說(shuō)明符。 |
scanf |
很危險(xiǎn) |
使用精度說(shuō)明符,或自己進(jìn)行解析。 |
sscanf |
很危險(xiǎn) |
使用精度說(shuō)明符,或自己進(jìn)行解析。 |
fscanf |
很危險(xiǎn) |
使用精度說(shuō)明符,或自己進(jìn)行解析。 |
vfscanf |
很危險(xiǎn) |
使用精度說(shuō)明符,或自己進(jìn)行解析。 |
vsprintf |
很危險(xiǎn) |
改為使用 vsnprintf,或者使用精度說(shuō)明符。 |
vscanf |
很危險(xiǎn) |
使用精度說(shuō)明符,或自己進(jìn)行解析。 |
vsscanf |
很危險(xiǎn) |
使用精度說(shuō)明符,或自己進(jìn)行解析。 |
streadd |
很危險(xiǎn) |
確保分配的目的地參數(shù)大小是源參數(shù)大小的四倍。 |
strecpy |
很危險(xiǎn) |
確保分配的目的地參數(shù)大小是源參數(shù)大小的四倍。 |
strtrns |
危險(xiǎn) |
手工檢查來(lái)查看目的地大小是否至少與源字符串相等。 |
realpath |
很危險(xiǎn)(或稍小,取決于實(shí)現(xiàn)) |
分配緩沖區(qū)大小為 MAXPATHLEN。同樣,手工檢查參數(shù)以確保輸入?yún)?shù)不超過(guò) MAXPATHLEN。 |
syslog |
很危險(xiǎn)(或稍小,取決于實(shí)現(xiàn)) |
在將字符串輸入傳遞給該函數(shù)之前,將所有字符串輸入截成合理的大小。 |
getopt |
很危險(xiǎn)(或稍小,取決于實(shí)現(xiàn)) |
在將字符串輸入傳遞給該函數(shù)之前,將所有字符串輸入截成合理的大小。 |
getopt_long |
很危險(xiǎn)(或稍小,取決于實(shí)現(xiàn)) |
在將字符串輸入傳遞給該函數(shù)之前,將所有字符串輸入截成合理的大小。 |
getpass |
很危險(xiǎn)(或稍小,取決于實(shí)現(xiàn)) |
在將字符串輸入傳遞給該函數(shù)之前,將所有字符串輸入截成合理的大小。 |
getchar |
中等危險(xiǎn) |
如果在循環(huán)中使用該函數(shù),確保檢查緩沖區(qū)邊界。 |
fgetc |
中等危險(xiǎn) |
如果在循環(huán)中使用該函數(shù),確保檢查緩沖區(qū)邊界。 |
getc |
中等危險(xiǎn) |
如果在循環(huán)中使用該函數(shù),確保檢查緩沖區(qū)邊界。 |
read |
中等危險(xiǎn) |
如果在循環(huán)中使用該函數(shù),確保檢查緩沖區(qū)邊界。 |
bcopy |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
fgets |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
memcpy |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
snprintf |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
strccpy |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
strcadd |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
strncpy |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |
vsnprintf |
低危險(xiǎn) |
確保緩沖區(qū)大小與它所說(shuō)的一樣大。 |