C語言中常見不安全函式及其替換函式

2021-09-27 11:14:03 字數 1830 閱讀 2162

c語言中,大多數的緩衝區溢位問題可以直接追溯到標準c庫。罪魁禍首就是因為不進行自變數檢查的、有問題的字元操作(例如:strcpy()、strcat()、sprintf()、gets()等等)。一般來講,像「避免使用strcpy()」和「永遠不使用gets()」這樣嚴格的規則在工作中經常遇到。

函式嚴重性解決方案

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

低危險確保緩衝區大小與它所說的一樣大。

c語言不安全庫 C語言 那些不安全的庫函式

c語言 那些不安全的庫函式 c和c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中...

c語言不安全庫 C語言 一些不安全的庫函式

那些不安全的庫函式 c 和 c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中多加...

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

函式 嚴重性 解決方案 gets 最危險 使用 fgets buf,size,stdin 這幾乎總是乙個大問題!strcpy 很危險改為使用 strncpy。strcat 很危險 改為使用 strncat。sprintf 很危險 改為使用 snprintf,或者使用精度說明符。scanf 很危險 使...