C++ 安全性最佳做法

本主题包含关于推荐的安全工具和做法的信息。 使用这些资源和工具并不会使应用程序免受攻击,但能降低攻击得逞的可能性。

Visual C++ 安全功能

本节讨论内置于 Visual C++ 编译器和链接器中的安全功能。

  • /GS(缓冲区安全检查)
    此编译器选项指示编译器将溢出检测代码插入到面临被利用风险的函数中。 当检测到溢出时,将停止执行。 默认情况下,此选项处于打开状态。

  • /SAFESEH(图像具有安全异常处理程序)
    此链接器选项指示链接器在输出映像中包括一张包含每个异常处理程序的地址的表。 在运行时,操作系统使用此表来确保只执行合法的异常处理程序。 这有助于防止在运行时执行由恶意攻击引入的异常处理程序。 默认情况下,此选项处于禁用状态。

  • /NXCOMPAT, /NXCOMPAT(与数据执行保护兼容)
    这些编译器和链接器选项启用数据执行保护 (DEP) 兼容性。 DEP 可防止 CPU 执行非代码页。

  • /analyze(企业代码分析)
    此编译器选项激活代码分析,以报告潜在的安全问题,例如缓冲区溢出、未初始化的内存、null 指针取消引用和内存泄漏等。 默认情况下,此选项处于禁用状态。 有关更多信息,请参见 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 类可保护多个数学运算。

经过检查的迭代器

经过检查的迭代器是一个强制实施容器边界的迭代器。 默认情况下,当经过检查的迭代器位于边界外时,它会生成一个异常并结束程序的执行。 经过检查的迭代器还提供其他级别的响应,这些响应将根据分配给预处理器定义(例如 _SECURE_SCL_THROWS_ITERATOR_DEBUG_LEVEL)的值而定。 例如,对于 _ITERATOR_DEBUG_LEVEL=2 的情况,经过检查的迭代器在调试模式中提供全面的正确性检查,这些检查可通过使用断言来获得。 有关更多信息,请参见Checked Iterators

托管代码的代码分析

托管代码的代码分析,又称 FxCop,是检查程序集与 Microsoft .NET Framework 设计准则的一致性的工具。 FxCop 分析各个程序集内的代码和元数据以检查下列领域中的缺陷:

  • 库设计

  • 本地化

  • 命名约定

  • 性能

  • 安全性

托管代码的代码分析包含在 Visual Studio Application Lifecycle Management 中,也可从以下地址下载:https://www.gotdotnet.com/team/fxcop/

Windows 应用程序验证工具

Application Verifier (AppVerifier) 作为应用程序兼容性工具包的一部分提供,这是一个可帮助开发人员标识潜在的应用程序兼容性、稳定性和安全问题的工具。

AppVerifier 可监视应用程序如何使用操作系统。 在应用程序运行的过程中,此工具会监视文件系统、注册表、内存和 API,并针对它发现的问题给出有关如何在源代码级进行修复的建议。

使用此验证工具可以执行下列操作:

  • 检测由常见编程错误导致的潜在应用程序兼容性错误。

  • 检查应用程序是否有与内存相关的问题。

  • 测试应用程序是否符合当前徽标计划(例如,Windows 7 软件徽标计划和 Windows Server 2008 R2 徽标计划)的各种要求。

  • 标识应用程序中潜在的安全问题。

Windows 应用程序兼容性工具包可以从 TechNet 网站上的“应用程序兼容性工具”页面获取。

.NET Framework 安全功能

配置安全策略介绍用于调整 .NET Framework 安全策略的准则和工具。

Windows 用户帐户

使用属于 Administrators 组的 Windows 用户帐户使开发人员和最终涉及到的客户暴露在安全风险下。 有关更多信息,请参见 作为用户组的成员运行

通过使用 Windows Vista 下的用户帐户控制提高安全性

用户帐户控制 (UAC) 是 Windows Vista 的一项功能,其中用户帐户具有有限的特权。 有关更多信息,请参见用户帐户控制 (UAC) 如何影响应用程序

请参见

参考

System.Security

概念

用户帐户控制 (UAC) 如何影响应用程序

其他资源

保证应用程序的安全