C++ 的安全性最佳作法

本主題包含有關建議的安全性工具及作法的資訊。 使用這些資源和工具並不能讓應用程式免於遭受攻擊,但是可以降低受到攻擊的可能性。

Visual C++ 安全性功能

本節討論 Visual C++ 編譯器和連結器內建的安全性功能。

  • /GS (緩衝區安全性檢查)
    此編譯器選項會指示編譯器,將滿溢偵測程式碼插入有被利用之風險的函式中。 當偵測到滿溢時,就會停止執行。 根據預設,這個選項是開啟的。

  • /SAFESEH (影像擁有安全例外處理常式)
    此連結器選項會指示連結器將資料表包含在輸出影像中,此資料表包含每個例外處理常式的位址。 在執行階段,作業系統會使用此資料表確保只會執行合法的例外處理常式。 這樣有助於在執行階段中防止執行惡意攻擊所引入的例外處理常式。 根據預設,這個選項是停用的。

  • /NXCOMPAT, /NXCOMPAT (與資料執行防止相容)
    這些編譯器和連結器選項會啟用資料執行防止 (DEP) 相容性。 DEP 可避免讓 CPU 執行無程式碼的頁面。

  • /analyze (企業程式碼分析)
    此編譯器選項會啟動可報告潛在安全問題的程式碼分析,例如緩衝區滿溢、未初始化記憶體、null 指標取值 (Dereferencing),以及記憶體遺漏 (Memory Leak)。 根據預設,這個選項是停用的。 如需詳細資訊,請參閱 C/C++ 程式碼分析概觀

  • /DYNAMICBASE (使用位址空間隨機載入)
    此連結器選項能讓您建置可於開始執行時載入記憶體中不同位置的可執行檔映像。 此選項也會使記憶體中的堆疊位置比較難以預測。

安全性增強 CRT

C 執行階段程式庫 (CRT) 已擴大為包含安全版本的原具備安全性風險的函式 (例如已檢查的 strcpy 字串複製函式)。這些不安全的舊版本函式已經被取代,因此使用它們會造成編譯時期的警告。 我們強烈建議您使用這些 CRT 函式的安全版本,而不是選擇抑制這些編譯警告。 如需詳細資訊,請參閱 Security Features in the CRT

SafeInt 程式庫

SafeInt Library可以在應用程式執行數學運算時,協助防止整數溢位和其他可能遭利用的錯誤。 SafeInt 程式庫包含 SafeInt ClassSafeIntException Class 及數個 SafeInt Functions

SafeInt 類別能避免整數溢位和除以零錯誤。 它可讓您處理不同型別間值的比較,以及提供兩個錯誤處理原則。 預設原則是讓 SafeInt 類別將 SafeIntException 類別例外狀況擲回,以報告為何數學運算無法完成。 第二個原則是讓 SafeInt 類別停止程式執行。 您也可以定義自訂的原則。

每個 SafeInt 函式均能保護一個數學運算免於發生可能遭利用的錯誤。 您可以使用兩個不同型別的參數,而不需要將參數轉換為相同的型別。 使用 SafeInt 類別來保護多個數學運算。

已檢查的 Iterator

已檢查的 Iterator 是強制使用容器界限的 Iterator。 根據預設,當已檢查的 Iterator 超出界限時,會產生例外狀況並使程式結束執行。 已檢查的 Iterator 能提供其他層級的回應,這些回應取決於指派給定義之前置處理器的值,例如 _SECURE_SCL_THROWS_ITERATOR_DEBUG_LEVEL。 例如,當 _ITERATOR_DEBUG_LEVEL=2 時,已檢查的 Iterator 能在偵錯模式下提供完整的正確性檢查,而這些檢查可透過使用判斷提示來取用。 如需詳細資訊,請參閱Checked Iterators

Managed 程式碼的程式碼分析

Managed 程式碼的程式碼分析 (也稱為 FxCop) 是一種可用來檢查組件是否符合 Microsoft .NET Framework 設計方針的工具。 FxCop 會在每個組件中分析程式碼和中繼資料 (Metadata),以檢查下列區域中的缺失:

  • 程式庫設計

  • 當地語系化

  • 命名規範

  • 效能

  • 安全性

Managed 程式碼的程式碼分析位於 Visual Studio Application Lifecycle Management 中,或者也可以從下列網址下載:https://www.gotdotnet.com/team/fxcop/

Windows 應用程式驗證器

Application Verifier (AppVerifier) 這項工具是屬於應用程式相容性工具組的一部分,可以協助開發人員識別潛在的應用程式相容性、穩定性和安全性問題。

AppVerifier 可監視應用程式使用作業系統的情況。 在執行應用程式時,它會監視檔案系統、登錄、記憶體和 API,並能針對發現的問題提供原始程式碼層級的修正建議。

此驗證器會讓您執行下列各項工作:

  • 測試是否有一般程式設計錯誤所引起的潛在應用程式相容性錯誤。

  • 檢查應用程式是否有記憶體相關的問題。

  • 測試應用程式是否符合目前標誌程式的需求,例如 Windows 7 Software Logo Program 和 Windows Server 2008 R2 Logo Program。

  • 識別應用程式中的潛在安全性問題。

您可以從 TechNet 網站的「應用程式相容性」網頁 (英文) 取得 Windows 應用程式相容性工具組。

.NET Framework 安全性功能

設定安全性原則可描述調整 .NET Framework 安全性原則的方針和工具。

Windows 使用者帳戶

如果使用屬於 Administrators 群組的 Windows 使用者帳戶,會為開發人員甚至是客戶帶來安全性風險。 如需詳細資訊,請參閱以使用者群組的成員身分執行

使用 Windows Vista 的使用者帳戶控制來增加安全性

使用者帳戶控制 (UAC) 是 Windows Vista 的功能,可以讓使用者帳戶擁有有限的權限。 如需詳細資訊,請參閱 使用者帳戶控制 (UAC) 如何影響應用程式

請參閱

參考

System.Security

概念

使用者帳戶控制 (UAC) 如何影響應用程式

其他資源

設定應用程式的安全性