iT邦幫忙

2026 iThome 鐵人賽

DAY 2
1

💡 今日學習目標:破解「資安只是資安部門或網管的事」的思維陷阱,理解「資安左移(Shift-Left Security)」與開發者的關鍵角色責任。


📌 前言:被拋來拋去的「資安皮球」

在許多企業或團隊中,當談到「系統安全」時,常會出現非常有趣的對話:

  • 老闆/主管:「這次系統上線安全嗎?資安是誰在負責的?」
  • 開發團隊(Dev):「我們只負責寫業務邏輯和功能,資安應該是網管團隊或 Infra 團隊設好防火牆吧?」
  • 系統/網管團隊(Infra/Ops):「防火牆和伺服器 Port 我們都鎖好了啊!但如果是程式碼有漏洞或被 SQL Injection,這是開發寫出來的啊!」
  • 資安團隊(Sec):「我們只有幾個人,要管全公司規範、做合規審查,哪有時間幫每一行 Code 做檢測好才讓你們上線?」
  • 一人 IT(資訊水電工):「修電腦、接網路線、寫程式、設定伺服器全都是我,我到底該先顧哪一個?」

這正是許多組織的現狀:每個人都覺得資安很重要,但資安最後成了大家互相推卸的皮球。

說句老實話,上面這五個角色裡,最後那一個就是筆者

Day 01 提過,筆者的日常大約是七成顧網路架構、三成顧資安。所以上面那五種說法,筆者不只全都聽過,其中好幾句自己也講過。也正因為每個位置的難處都待過,筆者很確定一件事:這不是誰特別不負責任,而是整個責任模型從一開始就搞錯了方向


🔍 核心原理:傳統「城堡防禦」的崩解與「資安左移」

還記得 Day 01 結尾那座「忘了裝城門大鎖的城堡」嗎?

傳統資安對這個問題的答案非常直覺:把城牆蓋高一點、護城河挖深一點就好

這就是所謂的 「城堡模型(Perimeter Security)」 :只要在網路邊界架設昂貴的防火牆(FW)與入侵偵測系統(IDS),把內網包得死死的,裡面跑的程式碼就算寫得不夠嚴謹,好像也無所謂。

然而在雲端化、API 化與遠端辦公的時代,邊界已經模糊。駭客攻擊不再只是硬撞防火牆,而是透過 Web 漏洞、合法 API 介面或供應鏈漏洞直攻心臟。

1. 什麼是「資安左移(Shift-Left Security)」?

在傳統的軟體開發生命週期(SDLC)中,時間軸是從左流向右:

需求/訪談(左) ➔ 設計 ➔ 開發 ➔ 測試 ➔ 上線/維運(右)

如果把資安檢查放在最右端的「測試與上線前夕」,會帶來極高的成本與風險:

  • 修復成本暴增:上線前一天才發現架構設計有重大資安缺陷,重新修改代價高昂。
  • 開發與資安對立:資安團隊成了「阻止專案上線的壞人」,開發團隊則被逼著加班改漏洞。

「資安左移」的核心通則:將資安的關注點與防守責任,向軟體開發時間軸的 左側(最早期) 推進。

資安左移:把資安檢查點從上線前挪到需求與設計階段


🛠️ 開發者的角色定位:你才是防守第一線

許多開發新手會擔心:「我連駭客技術都不懂,我怎麼做資安?」

其實,資安防禦的第一線不是資安專家,而是寫下那行程式碼的開發者

💡 責任劃分通則與協同架構

  1. 資安部門(Security Team):制定防禦政策、提供安全框架與工具、做最後的抽查與攻防演練(防範教練與裁判)。
  2. 維運與網管團隊(Infra/Ops):確保基礎設施安全、網路隔離、Patch 更新與 OS 硬化(城堡的城牆與道路)。
  3. 開發人員(Developers - 你我):寫出具備防禦力的程式碼、做輸入驗證、避免敏感資料外洩(城堡門窗的鑰匙與鎖)。

邏輯對比範例:門禁權限控制責任

// ❌ 誤以為「網管設好防火牆,程式碼就不需要權限檢查」
Function DownloadOrderInvoice(orderId):
    // 直接根據 orderId 撈取發票檔案並傳回,完全沒驗證目前登入者是誰
    Return FileStore.Get("invoice_" + orderId + ".pdf")

⚠️ 後果:防火牆無法擋住這個攻擊!因為這是合法的 HTTP 80/443 埠號請求。只要攻擊者把 orderId1001 改成 1002,就能看遍全公司的發票(即 IDOR 越權漏洞)。

// ✅ 開發者的資安防範:在程式碼中內建權限防禦
Function DownloadOrderInvoice(orderId, currentUser):
    Order = Database.FindOrder(orderId)

    // 開發者主動執行防守檢測:確認此訂單是否屬於當前使用者
    If Order.OwnerId != currentUser.Id AND NOT currentUser.HasRole("Admin"):
        AuditLog.Warn("Unauthorized access attempt by " + currentUser.Id)
        Return Error(403, "Access Denied")

    Return FileStore.Get("invoice_" + orderId + ".pdf")

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

  • 🔹 心法 1:資安不是單一部門的事,而是全體團隊的共同責任
  • 🔹 心法 2:資安左移(Shift-Left)。越早把資安考量納入開發流程,修復漏洞的成本就越低。
  • 🔹 心法 3:開發者是第一線防守者。網管和防火牆擋不住程式邏輯漏洞,只有寫出安全程式碼才能真正守住資料。

💬 明日預告:【Day 03】當軟體品質遇上資安:從「品質觀念演進史」解密資安四大防守思維
明天我們將深入探討戴明與克勞斯比的「品質演進史」,看看資安如何一步步從「事後檢查」演進到「設計與管理」!


上一篇
【Day 01】槍林彈雨下的防守戰:為什麼程式碼不只要寫得好,更要寫得安全?
下一篇
【Day 03】當軟體品質遇上資安:從「品質觀念演進史」解密資安四大防守思維
系列文
槍林彈雨下的資安防守:從品質觀念切入,帶開發者從零動手作資安 30 天3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言