- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 8字
- 2020-10-30 17:56:43
2.5 字符串處理函數
2.5.1 gets()
如果在C和C++安全編程領域存在一條硬性的規定,那么它一定是永遠不要使用gets()!在本書有漏洞的程序例子中,gets()函數頻頻出現。gets()函數從標準輸入讀取一行輸入到緩沖區中,直到遇到一個換行符或文件結束標志(EOF)為止。它不對緩沖區溢出進行任何檢測。以下文字摘自該函數的使用手冊:
永遠不要使用gets()。因為除非事先知道數據,否則永遠無法確定gets()將會讀入多少字符,而且gets()會在緩沖區末尾以外繼續存儲字符,因此對它的使用是極其危險的。使用它只會破壞計算機系統的安全性。
如前所述,gets()函數已在ISO/IEC 9899:TC3中被棄用并在C11中被刪除。
由于gets()函數不能被安全地使用,因此有必要使用替代的函數,對此有幾個不錯的選項可用。選擇哪個函數主要取決于采取的總體辦法。
推薦閱讀