C++ 的安全性最佳作法

更新:2007 年 11 月

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

Visual C++ 安全性功能

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

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

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

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

安全性增強 CRT

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

已檢查的 Iterator

如果採用已檢查的 Iterator,那麼當嘗試存取容器邊界外的項目時,Standard C++ 程式庫容器類別的使用者便會獲得告知。如需詳細資訊,請參閱Checked Iterators

Managed 程式碼的程式碼分析

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

  • 程式庫設計。

  • 當地語系化。

  • 命名規範。

  • 效能。

  • 安全性。

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

Windows 應用程式驗證器

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

在執行應用程式時,AppVerifier 會監視應用程式使用作業系統的情形,包括檔案系統、登錄、記憶體和 API。此工具會針對它所發現的問題,提供有關原始程式碼層級修正的指引。

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

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

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

  • 判斷應用程式是否符合成為 Windows XP 設計或 Windows Server™ 2003 Logo Program 認證之應用程式的各種需求。

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

Windows 應用程式驗證器可從https://www.microsoft.com/windows/appcompatibility/appverifier.mspx 取得。

.NET Framework 安全性功能

本章節提供兩種相關之 .NET Framework 安全性功能的概觀。

Windows 使用者帳戶

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

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

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

請參閱

概念

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

參考

System.Security

其他資源

設定應用程式的安全性