很少人會喜歡犯錯,或刻意想要製造錯誤,我們都希望能夠在最短的時間、以最少的人力,把事情做對、做好,開發應用程式的過程中也不例外,然而,在現實的工作環境中,我們往往必須面臨重重限制,時間永遠不夠用、人力一直吃緊、一起工作的伙伴能力不足、客戶端的需求變更應接不暇,在這麼嚴峻的條件下,我們還是必須一點一滴地把事情完成,有可能別人對於我們辛苦工作的成果很滿意,也有可能我們在過程中犯了錯,而導致對方使用上出現種種難以解決的問題,然後我們接著得重新面對過去所犯的過錯,並提出修正。

而身為一個用戶,你除了要求所用的應用程式儘速改正錯誤之外,也許可以試著了解一下問題是如何造成的,以及看看其他人對於這件事的評論。以Apple今年2月被揭露的SSL/TLS程式臭蟲來說,是一個可以值得探究的主題,因為它的成因不難理解,略有程式設計經驗的人都可以懂。

若要理解這個編號為CVE-2014-1266的安全性漏洞為何會發生,在搜尋引擎上輸入「gotofail」或「gotofail」,你就會看到5萬或8萬多筆關於討論這個弱點的網頁。單是在推特網站上面標記#gotofail的推文就不少,Hacker News社群新聞網站也有許多討論。

為什麼大家都用這個關鍵字?原因就出在該漏洞的發生是錯在「gotofail」的程式碼上,因為前後沒有加上括號,導致這行程式碼一定會執行,而不是因為符合條件才執行,於是這會造成任何加密金鑰都照單全收、而沒有真正去驗證的嚴重後果。

關於這個漏洞,這些網路上的文章,有很多都是引用了Google資深軟體工程師Adam Langley的《ImperialViolet》部落格文章〈Apple's SSL/TLS bug (22 Feb 2014)〉。同時,也有許多專家寫相關的部落格文章深入探討,像是Oracle的Solaris軟體工程師Alan Coopersmith的〈The goto fail heard ‘round the world〉、Facebook前端工程師Andrea Giammarchi的〈goto didn't fail;〉,如果你懶得看英文,阿里巴巴核心系統專家組的陳皓也寫了一篇〈由蘋果的低級Bug想到的〉

除了參考全球專業人士的意見,我們也向一些有開發應用程式能力的IT廠商詢問了此事。開發郵件安全、UTM等設備的眾至資訊技術總黃俊魁就說,有時候程式碼寫到後來,很多人會用簡寫的形式表達,因為實作上是可以把大括號省略掉,所以就會有這種錯誤發生。如果是初學者,反而不會這麼做,因為他們會在這樣的程式碼段落,老老實實地在前後加上兩個大括號,就不會發生這種狀況,然而,有時為了提高生產速度,或本身經常在寫程式碼的人來說,就會用簡寫的方式。像這樣的程式碼簡化模式,在PHP、Java或C語言的開發實務上,都有類似方式出現。

簡寫的應用其實有一些好處,例如增加撰寫程式碼的速度,也可以縮短程式碼行數。會開放這樣的便利性,他認為早期的系統硬體限制很大,為了要讓程式順利在記憶體、儲存空間很侷促的環境當中執行,所以就會有這種寫法發展出來。

成本效益的確是要考量的,達友科技副總經理暨技術總監林皇興也提到,若以企業內部應用系統為例,為了要去防止相關的漏洞被利用,可能要多寫一些程式碼來防範,而這些程序的進行,往往又會額外耗費運算時間去處理,該如何取捨?也許可以考慮拿掉一些不常用的功能,然後建議用戶在伺服器前安裝一臺網站應用程式防火牆,整體可能更有效益。

當然,對於重要的系統,該做的防護工作,還是要做,像手機、平板電腦等行動裝置看似尋常,但平時經常都是暴露在網際網路或是公共的網路上,受威脅的程度其實不低,因此它們是值得投入更高的成本去保護。

相關報導請參考:「軟體品管亮紅燈:小疏忽恐釀成大災難」

專欄作者

熱門新聞

Advertisement