- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 558字
- 2020-10-30 17:56:40
2.3.3 緩沖區溢出
當向為某特定數據結構分配的內存空間的邊界之外寫入數據時,即會發生緩沖區溢出。C和C++都容易發生緩沖區溢出問題,因為這兩種語言具有以下共同之處。
·將字符串定義為以空字符結尾的字符數組
·未進行隱式的邊界檢查
·提供了未強制性邊界檢查的標準字符串函數調用
取決于內存的位置以及溢出的規模,緩沖區溢出可能不會被偵測到,但它可能會破壞數據,導致程序出現奇怪的行為甚至非正常中止。
緩沖區溢出是一個令人頭痛的問題,因為在軟件的開發和測試階段并非總能發現該問題。并非所有C和C++實現在編譯過程中總能識別可能引發緩沖區溢出的安全缺陷,在運行時也不會報告越界寫問題。靜態分析工具可以幫助我們發現在早期開發過程中的緩沖區溢出問題,不過一旦測試數據可以引發一個可偵測的溢出,我們就可以使用動態分析工具來發現緩沖區溢出問題。
并非所有的緩沖區溢出都會造成軟件漏洞。然而,如果攻擊者能夠操縱用戶控制的輸入來利用安全缺陷,那么緩沖區溢出就會導致漏洞了。例如,有一些廣為人知的技術可以用于覆寫棧幀以執行任意的代碼。緩沖區溢出也可以在堆或靜態內存區域被利用,它的做法是通過覆寫鄰接內存的數據結構。
在我們深入了解這些利用行為之前,理解進程內存是如何組織和管理的是非常必要的。如果你對進程內存組織、執行棧以及堆管理等主題已經非常熟悉,可以直接跳到2.5節。
推薦閱讀
- 移動UI設計(微課版)
- Linux C/C++服務器開發實踐
- 實戰Java程序設計
- INSTANT MinGW Starter
- Easy Web Development with WaveMaker
- Oracle GoldenGate 12c Implementer's Guide
- Processing創意編程指南
- R語言數據可視化:科技圖表繪制
- 移動增值應用開發技術導論
- 編程改變生活:用Python提升你的能力(進階篇·微課視頻版)
- 零基礎學HTML+CSS
- Wearable:Tech Projects with the Raspberry Pi Zero
- 和孩子一起學編程:用Scratch玩Minecraft我的世界
- C語言程序設計實驗指導
- Python繪圖指南:分形與數據可視化(全彩)