微軟開源了 Checked C ,這是一個 C 語言的擴展版本,可以用於解決 C 語言中的一系列安全相關的隱患。正如其名字所示,Checked C 為 C 語言增加了檢查。這個檢查可以幫助開發者檢查常見的編程錯誤,比如緩存區侵占(buffer overruns)、內存訪問越界、不正確的類型轉換等。這些編程錯誤往往是造成許多重大安全漏洞的根本原因,比如破殼漏洞(Shellshock)、心髒出血漏洞(Heartbleed)、沙蟲(Sandworm)等。
Checked C 通過修改如何控制指針來解決這些問題,指針被程序員們用來定義他們的代碼所操作的內存地址。
當指針數量一多,指針控制就往往容易忙中出亂。項目越大,跟蹤它們就越困難。類似 Chromium、Firefox、Office、OpenSSL 以及其它的大型代碼庫在這方面都存在這樣的問題,你可以從它們的變更日志中看到大量的這類問題修復。
“Checked C 允許程序員更好的描述他們想要如何使用指針,以及指針應該指向的內存范圍”,微軟說,“這個信息可以用於在運行時環境中添加檢測,以偵測錯誤的數據訪問,而不是讓錯誤悄悄的發生而無所察覺。”
Checked C 給 C 語言添加了邊界檢查
Checked C 也將允許開發者檢測到他們以為 C 語言有、而實際卻沒有的功能誤用。按編程的說法來說,這個叫做“邊界檢查(bounds checking)”的功能,用於檢查變量/指針是否在它的范圍之內賦值。
C# 和 Rust 已經有這樣的功能了,而且還不止於此。然而,不幸的是,被廣泛使用的 C 和 C++ 卻沒有這樣的功能。微軟希望只需要對現有的 C/C++ 程序做最小的改動,利用 Checked C 就可以得到安全方面的改善,這樣會吸引大量的開發者開始使用 Checked C。
Checked C 項目已經放到了 GitHub 上。
這並不是微軟第一次對基本編程語言做出來自己的演繹,之前,該公司的程序員們還創建了一個名為 TypeScript 的 JavaScript 的超集,它已經得到了廣泛認可。