[問題] 寫大量沒有安全漏洞的C代碼很困難

作者: dharma (達)   2020-07-05 17:11:51
豐富的經驗告訴我們,要編寫大量沒有安全漏洞的C代碼是非常困難的,幾乎是不可能的
。”
https://www.chainnews.com/zh-hant/articles/087238150806.htm
請問上述情形
在使用現代先進的IDE
情況仍然是這樣嗎?
自己對C語言只有很粗淺的練習過教學題目而已
thanks
作者: nh60211as   2020-07-05 18:12:00
作者: ddavid (謊言接線生)   2020-07-05 20:29:00
是說這位在板上問問題都問了七年了還說是只做過練習題的新手……XD
作者: galic (嘎利)   2020-07-05 20:53:00
雲編程師
作者: lc85301 (pomelocandy)   2020-07-05 22:53:00
我都改寫 rust (欸
作者: atrix (班班)   2020-07-05 23:31:00
珍惜生命,遠離C/C++
作者: wei115 (ㄎㄎ)   2020-07-06 00:58:00
是有形式化驗證拉......不過我也不懂
作者: CoNsTaR ((const *))   2020-07-06 04:20:00
rust
作者: TitanEric (泰坦)   2020-07-06 09:46:00
rust學起來
作者: KanzakiHAria (神崎・H・アリア)   2020-07-06 13:26:00
這是你的問題 選C的理由從來都不是安全性要漏洞少就應該要選rust
作者: loveme00835 (髮箍)   2020-07-06 21:39:00
你會發現在這個板問問題得到的答案都是改寫別的語言確保安全性不從語言層面做的話就得要寫的人下手, 可以參考 CERT/MISRA, 只是在工具使用還有人員訓練做 trade-off 而已後來你會發現與其花錢買商用軟體檢查漏洞, 叫員工讀熟語言標準, 遵守某種寫碼規範, 總總措施還不如直接改用不容易犯錯的語言成本來得低廉
作者: Killercat (殺人貓™)   2020-07-07 08:35:00
C不可能啦 void*根本是漏洞製造機 C++還有點機會
作者: CoNsTaR ((const *))   2020-07-07 23:29:00
聽說之前有人把一個已經廣泛使用超過十年的 c lib(加密用的 lib),用 Agda 重寫(要證明語意想等性的),結果還是發現幾十個 bug...
作者: final01 (牛頓運動定律)   2020-07-11 17:11:00
寫出有漏洞的程式是你的問題還是語言的問題??這是你該搞清楚的
作者: CoNsTaR ((const *))   2020-07-11 21:29:00
應該都有問題吧 樓上這就像問走路跌倒是你的問題還是鞋子的問題一樣非得只能是其中一邊的問題嗎?
作者: loveme00835 (髮箍)   2020-07-11 22:28:00
以專案管理的角度來說:決定要穿這鞋子也是你的問題事實就是雖然成為程式語言, 但會真的當語言學習的人並不多, 所以寫出來的東西都像小朋友用積木兜出來的,看寫法就知道一定會出 bug
作者: CoNsTaR ((const *))   2020-07-13 07:15:00
樓上這麼說意思是對於所有問題,一定可以找到至少一種完全合適的語言囉?在我看來反而是因為都當成語言來學習「能溝通(用)就好」,才會這樣語言(有限符號的集合)只是一個程式語言的很小一部分,只是那個形式系統的長相而已
作者: loveme00835 (髮箍)   2020-07-13 09:29:00
語法->語意->語用, 只到第一層, 對第二層一知半解,這就是你說的「能溝通就好」. 不過因為語言的複雜度,這個議題已經和一般開發者沒什麼關係了
作者: CoNsTaR ((const *))   2020-07-13 11:20:00
... 身為開發者不懂自己寫的東西的意思,會比專案管理選錯鞋還要好嗎,我是不太懂啦
作者: loveme00835 (髮箍)   2020-07-13 12:01:00
我的意思是, 問題的核心在於開發者不懂自己在寫什麼,而不是有沒有選對語言, 選錯語言還是可以做對事情,只是付出成本比較高. 所以一開始用語言來評斷就是錯的立論, 終究是人的問題
作者: Killercat (殺人貓™)   2020-07-13 12:54:00
其實technical stack的選擇終究是設計師會碰到的問題年資成長下,「對於工具的選擇」也是技術的一部分了套句我剛講的「void*根本是漏洞製造機」而要避開這漏洞就得傳入長度,長度又要考慮int夠不夠?會不會因為paging產生效能問題?得花的精力真的有點多 XD前面講的C沒exception該怎麼辦?error code?可是這寫法又好痛苦?還是每個函數都加一個*int進parameter當err?如果不是真的在這領域鑽很深非要他不可,我是覺得技術的選擇也是經驗的一部分,放下比較好 XD我不知道C是不是戰鬥機,但是路上還有很多交通工具可以選擇,我並不想開台F-35去小七買個晚餐回來吃 :3

Links booklink

Contact Us: admin [ a t ] ucptt.com