天天看點

C語言中不安全的函數以及解決方案

函數         嚴重性      解決方案 gets         最危險         使用 fgets(buf, size, stdin)。這幾乎總是一個大問題!

strcpy     很危險 改為使用 strncpy。

strcat       很危險        改為使用 strncat。

sprintf     很危險        改為使用 snprintf,或者使用精度說明符。

scanf       很危險           使用精度說明符,或自己進行解析。

sscanf     很危險        使用精度說明符,或自己進行解析。

fscanf       很危險       使用精度說明符,或自己進行解析。

vfscanf     很危險       使用精度說明符,或自己進行解析。

vsprintf     很危險     改為使用 vsnprintf,或者使用精度說明符。

vscanf     很危險     使用精度說明符,或自己進行解析。

vsscanf    很危險     使用精度說明符,或自己進行解析。

streadd    很危險    確定配置設定的目的地參數大小是源參數大小的四倍。

strecpy    很危險     確定配置設定的目的地參數大小是源參數大小的四倍。

strtrns      危險        手工檢查來檢視目的地大小是否至少與源字元串相等。

realpath  很危險(或稍小,取決于實作)配置設定緩沖區大小為 MAXPATHLEN。同樣,手工檢查參數以確定輸入參數不超過 MAXPATHLEN。

syslog     很危險(或稍小,取決于實作)在将字元串輸入傳遞給該函數之前,将所有字元串輸入截成合理的大小。

getopt   很危險(或稍小,取決于實作)在将字元串輸入傳遞給該函數之前,将所有字元串輸入截成合理的大小。

getopt_long   很危險(或稍小,取決于實作)在将字元串輸入傳遞給該函數之前,将所有字元串輸入截成合理的大小。

getpass   很危險(或稍小,取決于實作)在将字元串輸入傳遞給該函數之前,将所有字元串輸入截成合理的大小。

getchar   中等危險   如果在循環中使用該函數,確定檢查緩沖區邊界。

fgetc       中等危險   如果在循環中使用該函數,確定檢查緩沖區邊界。

getc        中等危險   如果在循環中使用該函數,確定檢查緩沖區邊界。

read       中等危險    如果在循環中使用該函數,確定檢查緩沖區邊界。

bcopy    低危險       確定緩沖區大小與它所說的一樣大。

fgets      低危險       確定緩沖區大小與它所說的一樣大。

memcpy 低危險      確定緩沖區大小與它所說的一樣大。

snprintf 低危險       確定緩沖區大小與它所說的一樣大。

strccpy 低危險         確定緩沖區大小與它所說的一樣大。

strcadd 低危險        確定緩沖區大小與它所說的一樣大。

strncpy 低危險        確定緩沖區大小與它所說的一樣大。

vsnprintf 低危險     確定緩沖區大小與它所說的一樣大。