自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++之父再“開(kāi)槍”,美國(guó)安全局也要碰一碰

原創(chuàng) 精選
開(kāi)發(fā) 前端
2022年年底,美國(guó)國(guó)家安全局(NSA)在其所發(fā)布的《Software Memory Safety》報(bào)告中指出:C語(yǔ)言和C++語(yǔ)言是不安全的,建議各組織放棄使用C/C++,并鼓勵(lì)各組織將編程語(yǔ)言從C和C++等轉(zhuǎn)向更加安全的替代語(yǔ)言——如C#、Rust、Go、Java或Ruby。

?作者 | 徐杰承

審校 | 言征

在剛剛過(guò)去的2022年,C++以4.62%的流行增長(zhǎng)率,時(shí)隔近20年再度榮獲了TIOBE的年度編程語(yǔ)言桂冠。而作為C++語(yǔ)言的締造者,C++之父Bjarne Stroustrup最近卻顯得有些“暴躁”。

去年9月,微軟CTO Mark Russinovich在其社交賬號(hào)上發(fā)布動(dòng)態(tài)稱:開(kāi)發(fā)人員是時(shí)候停止使用C/C++來(lái)啟動(dòng)新項(xiàng)目,并建議在使用non-GC語(yǔ)言的場(chǎng)景中使用Rust。對(duì)此,Bjarne也在一次采訪中回懟了Mark的言論。然而就在這次事件平息后不久,一個(gè)更具影響力的組織又將矛頭指向了C++。

2022年年底,美國(guó)國(guó)家安全局(NSA)在其所發(fā)布的《Software Memory Safety》報(bào)告中指出:C語(yǔ)言和C++語(yǔ)言是不安全的,建議各組織放棄使用C/C++,并鼓勵(lì)各組織將編程語(yǔ)言從C和C++等轉(zhuǎn)向更加安全的替代語(yǔ)言——如C#、Rust、Go、Java或Ruby。對(duì)此,NSA網(wǎng)絡(luò)安全主任Neal Ziring還在一次采訪中表示,所有程序員都在犯簡(jiǎn)單的錯(cuò)誤,這些錯(cuò)誤依然非常普遍。

NSA的這篇報(bào)告,也再次激發(fā)了Bjarne的戰(zhàn)斗欲望。在經(jīng)歷了數(shù)周的準(zhǔn)備后,Bjarne于近日發(fā)布了一篇名為《Think seriously about“safety”;then do something sensible about it》的論文,正式回應(yīng)了NSA一系列言論。而雙方的這場(chǎng)隔空對(duì)話,也將C++這門擁有近30年歷史的老牌編程語(yǔ)言再次推上了風(fēng)口浪尖。

1、NSA:少用或禁用C/C++

在《Software Memory Safety》報(bào)告中,NSA指出:現(xiàn)代社會(huì)嚴(yán)重依賴軟件的自動(dòng)化與隱性信任,如果開(kāi)發(fā)人員所編寫(xiě)的軟件無(wú)法按照預(yù)期方式運(yùn)行,那就意味著有時(shí)我們將不得不為惡意目的妥協(xié)。目前,惡意利用軟件漏洞的行為經(jīng)?;趦?nèi)存問(wèn)題,其中典型的例子便是內(nèi)存緩沖區(qū)益出。

其舉例稱:微軟在2019年的一次會(huì)議上就曾表示,自2006年至2018年,70%的漏洞是由內(nèi)存安全問(wèn)題引起的。惡意攻擊者可以利用這些漏洞進(jìn)行遠(yuǎn)程代碼執(zhí)行或其他非法行為。而谷歌也于近幾年在Chrome瀏覽器中發(fā)現(xiàn)了類似的內(nèi)存安全漏洞。

常用語(yǔ)言如C和C++,雖然提供了很大的自由度和靈活性,但在進(jìn)行內(nèi)存管理時(shí),過(guò)于依賴于程序員來(lái)執(zhí)行所需的檢查內(nèi)存引用。因此,簡(jiǎn)單的錯(cuò)誤就可能導(dǎo)致基于內(nèi)存和可利用性的漏洞。雖然軟件分析工具可以監(jiān)測(cè)到許多內(nèi)存實(shí)例,管理事務(wù)和操作環(huán)境選項(xiàng)也可以提供一些保護(hù),但內(nèi)存安全語(yǔ)言的固有保護(hù)可以防止或減輕大多數(shù)內(nèi)存管理問(wèn)題。

技術(shù)的缺陷將使作惡者更容易找到存在問(wèn)題的代碼,使用內(nèi)存安全語(yǔ)言可以防止程序員引入某些內(nèi)存相關(guān)問(wèn)題的類型。它們的語(yǔ)言特性將保護(hù)程序員無(wú)意中引入的內(nèi)存管理錯(cuò)誤。因此,美國(guó)國(guó)家安全局建議各組織選擇“明智的做法”——減少或禁用固有內(nèi)存保護(hù)問(wèn)題的編程語(yǔ)言,如C/C++,盡可能使用內(nèi)存安全語(yǔ)言,如C#、Rust、Go、Java或Ruby。

2、Bjarne:你們根本不懂C++

“認(rèn)真考慮‘安全’,然后采取一些明智的措施”這是Bjarne回應(yīng)NSA的論文的標(biāo)題?!疤嗳苏?wù)撊缟裨挵愕腃與C++,然后開(kāi)始關(guān)注C語(yǔ)言的弱點(diǎn),但這些缺點(diǎn)在C++中完全可以避免,并且C++能更加直接的表達(dá)程序員的想法”。在該文章中Bjarne表示,許多C++的使用者停滯不前,NSA完全忽略了C++30年來(lái)的進(jìn)步,并將C與C++混為一談,這令人感到非常遺憾。

“現(xiàn)在,如果我認(rèn)為這些‘安全’的語(yǔ)言中任何一種在我說(shuō)關(guān)心的使用范圍內(nèi)優(yōu)于C++,我不認(rèn)為C/C++的淡出是一件壞事,但事實(shí)并非如此”。Bjarne提到,NSA對(duì)“安全”的概念僅限于內(nèi)存安全,而忽略了一門語(yǔ)言可能被用來(lái)違反某種形式的安全保障和十幾種其他方式。

安全的目標(biāo)應(yīng)該是類型和資源安全,其中每個(gè)對(duì)象都根據(jù)其類型使用,并且沒(méi)有資源泄露。對(duì)于C++,這意味著一些運(yùn)行時(shí)規(guī)范檢查,消除通過(guò)空指針的訪問(wèn)并避免類型轉(zhuǎn)換和聯(lián)合體的誤用。C++提供了高級(jí)工具,如容器、span、range-for循環(huán)和變量,它們可以在不損害生產(chǎn)率或效率的同時(shí)提供保障。關(guān)于NSA提到的所謂安全語(yǔ)言,Bjarne表示,所有語(yǔ)言都容易收到未經(jīng)靜態(tài)驗(yàn)證的代碼攻擊,每個(gè)系統(tǒng)都必須使用硬件,而有效的硬件訪問(wèn)很少是安全的。

此外,Bjarne還提供了安全使用C++的一些策略:

  • 靜態(tài)分析,以驗(yàn)證沒(méi)有不安全的代碼被執(zhí)行
  • 編碼規(guī)則,以簡(jiǎn)化代碼,使工業(yè)規(guī)模的靜態(tài)分析可行
  • 庫(kù),使簡(jiǎn)化的代碼能簡(jiǎn)化編寫(xiě),并確保在需要時(shí)進(jìn)行運(yùn)行時(shí)檢查

Bjarne提到,目前世界上有數(shù)百萬(wàn)C++程序員與數(shù)十億行C++代碼,該語(yǔ)言被應(yīng)用在包括航空航天、醫(yī)療儀器、人工智能/機(jī)器學(xué)習(xí)、知識(shí)圖譜、生物醫(yī)學(xué)及高能物理等領(lǐng)域,自己對(duì)于NSA的言論感到震驚。此外,在文章的末尾,Bjarne還對(duì)NSA提出了一個(gè)靈魂拷問(wèn):據(jù)我所知,在發(fā)布報(bào)告前,沒(méi)有一位專家向C++標(biāo)準(zhǔn)委員會(huì)進(jìn)行過(guò)資訊,所謂“明智的做法”是什么,建議列出一個(gè)明確的清單。

3、誰(shuí)輸誰(shuí)贏并沒(méi)那么重要

誠(chéng)然,C++之父與美國(guó)國(guó)家安全局的這次隔空喊話,讓廣大開(kāi)發(fā)者飽飽的吃了一次大瓜。但在這場(chǎng)針尖對(duì)麥芒的battle中,誰(shuí)輸誰(shuí)贏其實(shí)真的沒(méi)有那么重要。C++不安全、C++安全,這兩種說(shuō)法從辯證的角度來(lái)看都是正確的。我們必須承認(rèn)NSA所提出的,的確有些語(yǔ)言在內(nèi)存安全保障方面的語(yǔ)言特性是優(yōu)于C++的;而對(duì)于Bjarne的回應(yīng),在合理使用工具和保障規(guī)范的前提下,C++也確實(shí)能夠保證其安全性。

作為一門擁有30年歷史的老牌編程語(yǔ)言,C++依然能夠在今天保持其強(qiáng)大的競(jìng)爭(zhēng)力,并在編程語(yǔ)言排行榜中位居前列,這無(wú)疑不證明著C++功能的強(qiáng)大,以及其在時(shí)代考驗(yàn)下的演進(jìn)效率。正如Bjarne所說(shuō),如今我們擁有著數(shù)十億行的C++代碼,基于C++所編寫(xiě)的軟件也運(yùn)行在世界的每一個(gè)角落。無(wú)論在過(guò)去還是現(xiàn)在,世界上每天都會(huì)產(chǎn)生大量的C++代碼與C++開(kāi)發(fā)者,而這一趨勢(shì)也將在未來(lái)繼續(xù)延續(xù)。

每種語(yǔ)言都有自身的優(yōu)劣勢(shì)以及適合的應(yīng)用場(chǎng)景,世界上并沒(méi)有最好的編程語(yǔ)言,只有最適合的編程語(yǔ)言。在此借由Slashdot上一位網(wǎng)友的留言:你可以用C++寫(xiě)出安全的代碼么?當(dāng)然可以,用C、ASM甚至任何成熟的編程語(yǔ)言都可以做到。對(duì)于任何成熟語(yǔ)言,關(guān)鍵問(wèn)題都不在于是否能做到,而在于如何選擇和更好地使用它們。

參考鏈接:

https://www.infoworld.com/article/3686517/c-plus-plus-creator-bjarne-stroustrup-defends-its-safety.html

https://www.theregister.com/2022/11/11/nsa_urges_orgs_to_use/

https://developers.slashdot.org/story/23/01/21/0526236/rust-safety-is-not-superior-to-c-bjarne-stroustrup-says

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2022-01-17 14:51:20

鴻蒙HarmonyOS應(yīng)用

2022-12-23 20:46:37

遙控器應(yīng)用鴻蒙

2021-07-15 09:39:06

鴻蒙HarmonyOS應(yīng)用

2021-12-28 16:10:20

鴻蒙HarmonyOS應(yīng)用

2022-05-19 15:47:24

碰一碰連接設(shè)備開(kāi)發(fā)鴻蒙

2021-02-23 19:24:51

數(shù)字人民幣碰一碰支付

2022-05-17 10:33:58

設(shè)備開(kāi)發(fā)鴻蒙操作系統(tǒng)

2013-08-01 00:00:00

Facebook用戶隱私XKeyscore

2021-03-20 22:11:16

數(shù)字人民幣數(shù)字貨幣區(qū)塊鏈

2013-07-15 10:01:37

美國(guó)家安全局OpenStack云平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)