用C語言寫的程序不安全

jopen 10年前發布 | 10K 次閱讀 C語言

用C語言寫的程序不安全

        英文原文:The Heartbleed Bug        

        關于C語言內存管理薄弱的問題幾年前我們就討論過。有人試圖反駁,說現代各種操作系統或 runtime 平臺的進步,對內存管理的風險提供了各種保護,比如地址空間隨機化,還有各種諸如 Valgrind 這樣的工具可以發現內存訪問 bug,大大削弱危險程度。我十分推薦大家重新閱讀一下那次討論。

        我的觀點——當時和現在——都是C語言不適合用來寫安全性要求高的程序,任何缺乏內存檢查機制的編程語言都不適合。很簡單,就是不適合。它們應 該僅限于用來寫一些小的核心系統,最好是小到可以用一些常規的方法(被證明的方法)進行檢查,所有其它的,包括全部應用邏輯,都應該用受控代碼實現(例如 C#,Java 或其它的,我沒有偏向)。

        心臟出血就是這種缺乏邊界檢查造成的結果的另一個例子。它無法被 Valgrind 這樣的工具檢查出,因為它不是普通的被觸發的動作——它需要是一種惡意的行為或是一種足夠智能的測試協議才能發現(很難很難)。

        事實上,沒有哪個程序員能夠聰明到可以寫出完全避免心臟出血這樣的 bug 的程序。畢竟,程序員的學習和編碼關注的是他們的程序的邏輯。在沒有邊界檢查機制的編程語言里,邏輯可能會走錯路,因為計算機可以訪問和執行任意內存內 容,這些內容是和你的程序里的代碼和變量是沒關系的。所有沒有邊界檢查的編程語言將計算機的多個維度暴露給程序,如果你覺得自己比 OpenSSL 開發團隊強、能很好的處理這種情況,那是自欺欺人。

        我們無法在軟件中避免 bug 的存在,但我們可以堵住這些看起來無窮無盡的 bug 的源頭。因為它,很早之前我們的互聯網就遭受了 Morris 蠕蟲病毒的危害。現在,2 年的時間里,世界 70% 的互聯網流量都暴露無疑,代價慘重。如果不堵住這源頭,以后會讓我們損失更多。

來自: www.vaikan.com
                    <span id="shareA4" class="fl">                          </span> 

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!