iT邦幫忙

2026 iThome 鐵人賽

DAY 12
1

💡 今日學習目標:踏入階段三「資安是製造出來的」,理解卡內基梅隆大學 SEI 的 Secure Coding 哲學,建立一次就把程式碼寫對的防守心態。


📌 前言:事後貼補丁 vs. 製造即安全

歡迎來到階段三!

https://ithelp.ithome.com.tw/upload/images/20260831/200075425F9w8t5OMG.png

在階段二中,我們學會了用 SonarQube for IDE 與 SonarQube Community Build 來做資安「檢查」。但相信你在動手修 Hotspot 的時候,多少閃過這個念頭:

「如果當初在敲鍵盤時就寫對,現在就不需要花幾個小時去重構程式碼、重新編譯、重新測試了!」

這正是現代工業品質發展的第二階段:「品質是製造出來的(Manufacturing / Process)」

1920 年代的製造業巨頭們發現,單靠工廠末端的品質檢查員(Inspection)無法降低不良率,唯一的解法是在生產線上改善工藝,讓工人在製造的第一時間就把事情做對

軟體開發也是完全相同的道理:既然事後修漏洞那麼痛,為什麼不一開始就把 Code 寫好?


🔍 歷史淵源:SEI 與 Secure Design Patterns

「安全程式碼(Secure Coding)」這件事,不是這幾年才被想出來的。

早在 2009 年,美國卡內基梅隆大學的 軟體工程研究所(SEI, Software Engineering Institute) 就發表了一份技術報告《Secure Design Patterns》(編號 CMU/SEI-2009-TR-010),系統性地整理出一套「把安全性做成固定樣式」的方法:從架構層、設計層一路到實作層,讓開發者可以像套用設計模式(Design Pattern)一樣,直接套用經過驗證的安全模式。

這份報告背後的主張其實很簡單,卻正好是整個階段三的起點:

安全不是等程式寫完之後再補上去的功能,而是應該在寫下每一行程式碼的當下,就一起被設計進去的性質。


💡 事後修補的代價:那個「100 倍」到底是真的嗎?

你大概看過那張圖:漏洞越晚發現,修復成本一路飆升,到了上線階段變成 100 倍。

這個說法方向是對的,但它有一個幾乎所有人都省略掉的前提。而那個前提,對我們這種小團隊與個人開發者來說特別重要。

軟體缺陷修復成本:大型系統約 100 倍,小型專案約 5 倍

先講出處。網路上流傳最廣的版本,來源通常寫著「IBM Systems Sciences Institute 的研究」,但這份研究其實查不到原始文獻,最早的痕跡只是一則教科書註腳,後來被一路轉引,變成了大家都以為有根據的業界常識。

真正經得起查的來源,是 Barry Boehm 與 Victor Basili 發表在《IEEE Computer》(2001) 上的〈Software Defect Reduction Top 10 List〉。他們的結論是:

交付之後才找到並修好一個問題,成本往往是在需求與設計階段處理的 100 倍左右

但同一篇論文緊接著補了一句,而這句才是我們真正該記住的:

在小型、非關鍵的專案上,這個比例比較接近 5:1。

所以,如果你手上是個人專案或內部小系統,別人喊的「100 倍」對你來說確實是誇大的。

但 5 倍也還是 5 倍。 一件原本花你一小時的事,拖到上線後要花掉一整個工作天。

而且這還只算了「工時」。如果那個漏洞在上線後是被攻擊者搶先發現的,那你要付的就遠遠不只是工時了。


🛠️ Secure Coding 的三大核心心法

要在製造階段就寫出安全的程式碼,開發新手必須建立以下三個底層思維:

1. 不信任原則 (Never Trust Input)

任何來自外部的資料(包括用戶輸入、URL 參數、HTTP Header、甚至資料庫查出來的欄位),在未經驗證前統統視為「可疑污點」。

2. 顯式設計勝於隱式假設 (Explicit over Implicit)

不要假設「使用者一定會按照預期的格式填寫」。安全程式碼必須顯式地處理由非預期輸入引發的邊界情況。

3. 採用安全標準 (Adopt Secure Standards)

不要自己發明密碼學演算法,不要自己寫複雜的正則過濾;堅決採用經過社群千錘百鍊的業界安全標準與函式庫。


🎯 今日重點小結與防守心法

  • 🔹 心法 1:資安是製造出來的。在打字敲 Code 的當下就把防禦邏輯寫進去,效益最高。
  • 🔹 心法 2:越晚修越貴,差距在 5 到 100 倍之間。倍數取決於專案規模,但方向從來沒有例外。別再抱著「先寫完,有漏洞以後再說」的心態。
  • 🔹 心法 3:引用數字之前,先確認它的出處。這一點本身就是專業素養:連「100 倍」這種業界常識都可能是訛傳,你在資安報告裡引用的數據更該站得住腳。

💬 明日預告:【Day 13】SEI 10 大安全程式碼法則 (上):輸入驗證 (Validate Input) 與預設拒絕
明天我們將開始逐一拆解 SEI Top 10 Secure Coding Practices 的前五項黃金法則!


上一篇
【Day 11】【動手做】修復你的第一個資安問題:安全重構與狀態歸檔
下一篇
【Day 13】SEI 10 大安全程式碼法則 (上):輸入驗證 (Validate Input) 與預設拒絕
系列文
槍林彈雨下的資安防守:從品質觀念切入,帶開發者從零動手作資安 30 天14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
AndyAWD
iT邦新手 1 級 ‧ 2026-08-31 23:49:08

主管會說先求有再求好 XD

我要留言

立即登入留言