- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 558字
- 2020-10-30 17:56:40
2.3.3 緩沖區溢出
當向為某特定數據結構分配的內存空間的邊界之外寫入數據時,即會發生緩沖區溢出。C和C++都容易發生緩沖區溢出問題,因為這兩種語言具有以下共同之處。
·將字符串定義為以空字符結尾的字符數組
·未進行隱式的邊界檢查
·提供了未強制性邊界檢查的標準字符串函數調用
取決于內存的位置以及溢出的規模,緩沖區溢出可能不會被偵測到,但它可能會破壞數據,導致程序出現奇怪的行為甚至非正常中止。
緩沖區溢出是一個令人頭痛的問題,因為在軟件的開發和測試階段并非總能發現該問題。并非所有C和C++實現在編譯過程中總能識別可能引發緩沖區溢出的安全缺陷,在運行時也不會報告越界寫問題。靜態分析工具可以幫助我們發現在早期開發過程中的緩沖區溢出問題,不過一旦測試數據可以引發一個可偵測的溢出,我們就可以使用動態分析工具來發現緩沖區溢出問題。
并非所有的緩沖區溢出都會造成軟件漏洞。然而,如果攻擊者能夠操縱用戶控制的輸入來利用安全缺陷,那么緩沖區溢出就會導致漏洞了。例如,有一些廣為人知的技術可以用于覆寫棧幀以執行任意的代碼。緩沖區溢出也可以在堆或靜態內存區域被利用,它的做法是通過覆寫鄰接內存的數據結構。
在我們深入了解這些利用行為之前,理解進程內存是如何組織和管理的是非常必要的。如果你對進程內存組織、執行棧以及堆管理等主題已經非常熟悉,可以直接跳到2.5節。
推薦閱讀
- Vue.js入門與商城開發實戰
- 實戰Java程序設計
- 零基礎學Java程序設計
- PLC編程與調試技術(松下系列)
- Scala編程實戰(原書第2版)
- Java EE 8 Application Development
- 青少年信息學競賽
- Android Wear Projects
- 區塊鏈技術進階與實戰(第2版)
- Apache Camel Developer's Cookbook
- Greenplum構建實時數據倉庫實踐
- JavaScript編程精解(原書第2版)
- Node.js實戰:分布式系統中的后端服務開發
- Mastering ArcGIS Server Development with JavaScript
- 機器人ROS開發實踐