- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 461字
- 2020-10-30 17:56:40
2.3.2 IsPasswordOK()的安全缺陷
在IsPasswordOK()程序中,允許攻擊者獲得未授權訪問的安全缺陷是由于對gets()的調用所引起的。上面已經提到過,gets()函數從標準輸入復制字符串到Password中,直至遇到EOF標志或者換行符。然而,Password數組只能容納11個字符的密碼加上一個結尾的空字符。這個情況就導致如果輸入多于11個字符,那么程序就會對Password數組進行越界寫,圖2.4展示了一個程序試圖復制16字節的數據到12字節的數組所發生的情況。
這種允許越界寫的情況在安全領域中稱為緩沖區溢出(buffer overflow)。緩沖區溢出實際上是一個運行時事件。然而,在這個例子中,造成緩沖區溢出發生的原因是一個無界字符串讀取,而這一點可以在程序編譯時識別。在進一步了解緩沖區溢出究竟如何造成安全風險之前,我們首先需要對緩沖區溢出和進程內存組織有個大概的了解。
圖2.4 復制16字節的數據到12字節的數組
IsPasswordOK()程序有另一個問題:它沒有檢查gets()的返回狀態。這違反了“FIO04-C.檢測和處理輸入和輸出錯誤”。當gets()失敗時,Password緩沖區的內容是不確定的,所以后續的strcmp()調用的行為是未定義的。在實際的程序中,緩沖區甚至可能包含先前其他用戶輸入的密碼。
推薦閱讀
- 深入理解Android(卷I)
- INSTANT Weka How-to
- 3D少兒游戲編程(原書第2版)
- RabbitMQ Essentials
- Quantum Computing and Blockchain in Business
- SQL Server 2016 從入門到實戰(視頻教學版)
- Java程序設計與項目案例教程
- Learning Nessus for Penetration Testing
- Android Studio Cookbook
- Struts 2.x權威指南
- 從Excel到Python數據分析:Pandas、xlwings、openpyxl、Matplotlib的交互與應用
- Clojure High Performance Programming(Second Edition)
- Python預測分析實戰
- DevOps 精要:業務視角
- Python深度學習(第2版)