架構更新

已完成

許多開發人員都認為他們用來建置軟體的架構和程式庫主要取決於功能或個人喜好。 不過,選擇架構是一項重要的決定,不僅要考量設計和功能,也要考量安全性。 選擇具有最新安全性功能的架構,並將它維持在最新狀態,是確保應用程式安全性的最佳方式之一。

謹慎選擇您的架構

選擇架構時最重要的安全性相關因素,是它受到妥善支援的程度。 最理想的架構會有明確的安全性配置,且會有設法改善並測試架構的大型社群加以支援。 沒有任何軟體是完全沒有錯誤或完全安全的,但在發現弱點時,我們會想要確定它能夠很快地獲得解決或提供因應措施。

「妥善支援」通常會與「新型」同義。 較舊的架構通常會被取代,或越來越少人使用。 即使您對於較舊的架構有豐富的使用經驗 (或是已使用它撰寫許多應用程式),您最好還是選擇具有您所需功能的新型程式庫。 新型架構通常會以先前反覆測試所得到的經驗作為建置基礎,因此,為新的應用程式選擇這種架構將可縮減受威脅面。 如果在用來撰寫繼承應用程式的較舊架構中發現某個弱點,您需要特別注意的應用程式就多了一個。

如需安全設計和縮減受威脅面的詳細資訊,請參閱 Microsoft Azure Well-Architected Framework - 安全性

持續更新架構

軟體開發架構 (例如 JAVA Spring 和 .NET Core) 會定期發行更新和新版本。 這些更新包括新功能、舊功能的移除,且通常會有安全性修正或改進。 當我們讓架構過期時,即會建立「技術性債務」。架構過期的時間越長,我們想要將程式碼轉為最新版本的困難度和風險就會更高。 此外,如同最初的架構選擇,持續沿用舊版的架構,您將承受更多其實已在較新版的架構中獲得修正的安全性威脅。

以 2016 年到 2017 年為例,Apache Struts 架構中出現了超過 30 個弱點。 開發小組迅速處理了這些弱點,但有些公司並未套用修補程式,導致因資料外洩付出了代價請務必將您的架構和程式庫保持在最新狀態

如何更新我的架構?

有些架構 (例如 Java 或 .NET) 需要安裝,且通常會定期發行。 注意新版本的發行,並規劃以程式碼的分支試用剛發行的新版本,是不錯的做法。 例如,.NET Core 即維護了可供您查看是否有最新版本的版本資訊頁面

您可透過套件管理員對較特殊的程式庫 (例如 JAVAScript 架構或 .NET 元件) 進行更新。 NPMWebpack 是 Web 專案的熱門選項,且大部分的 IDE 或建置工具都支援它們。 在 .NET 中,我們會使用 NuGet 來管理元件相依性。 如同更新核心架構,建立程式碼分支、更新元件和測試,都是驗證新版本相依性的好方法。

注意

dotnet 命令列工具有 add packageremove package 選項可用來新增或移除 NuGet 套件,但沒有對應的 update package 命令。 不過,其實您可以在專案中執行 dotnet add package <package-name>,如此即將會自動將套件升級至最新版本。 這是更新相依性而無須開啟 IDE 的簡易方式。

利用內建的安全性

請務必確認您的架構所提供的安全性功能。 如果有內建的標準技術或功能,切勿導入您自己的安全性。 此外,請使用經實證的演算法和工作流程,原因是它們通常都已經過許多專家的檢驗、評論和強化,因此您可以確定其可靠性和安全性。

.NET Core 架構具有無限的安全性功能。 以下文件中的幾個核心起點:

每一項功能都由各專精領域的專家所撰寫並進行嚴格的測試,以確認其運作性符合預期 (且僅按預期工作)。 其他架構也提供類似的功能;請洽詢提供架構的廠商,以了解他們在每個類別提供的功能。

警告

撰寫您自己的安全性控制項而不使用您的架構所提供的程式碼,不僅浪費時間,也較不安全。

適用於雲端的 Microsoft Defender

使用 Azure 裝載您的 Web 應用程式時,如果您的架構已過時,適用於雲端的 Defender 會在 [建議] 索引標籤中對您提出警告。別忘了不時查看該處,確認是否有任何與您的應用程式相關的警告。

Screenshot of Microsoft Defender for Cloud recommending a framework upgrade.

摘要

請盡可能選擇新型架構來建置您的應用程式、一律使用內建的安全性功能,並確實將其保持在最新狀態。 這些簡單的規則將有助於確保應用程式擁有穩固的基礎。