首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

安全性測驗:測試您的安全性 IQ (一) 緩衝區溢出與 strncpy/strncat 陷阱

     編輯:關於C語言

錯誤 #1 (C/C++)


void func(char *s1, char *s2) {
    char d[32];
    strncpy(d, s1, sizeof d - 1);
    strncat(d, s2, sizeof d - 1);
    ...
}

問題分析

雖然使用了長度限制的 strncpy/strncat,但第二次呼叫時緩衝區剩餘空間已被第一次佔用。strncat 的第三參數是「目的緩衝區剩餘空間」,而非「來源長度」。此處傳入完整緩衝區大小導致溢位。經典緩衝區溢出錯誤。

補充說明

  • strncpy/strncat 回傳值為目的指標,無法指示是否截斷。
  • 正確計算剩餘空間極易出錯,建議改用 strcpy_s/strcat_s (C11) 或安全庫函式。
  • Visual C++ 2005+ 編譯器警告 C4996、靜態分析警告 C6053 可偵測此類問題。

發現此錯誤 +1 分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved