C++ 安全性最佳做法
更新:2007 年 11 月
本主题包含关于推荐的安全工具和做法的信息。使用这些资源和工具并不会使应用程序免受攻击,但能降低攻击得逞的可能性。
Visual C++ 安全功能
本节讨论内置于 Visual C++ 编译器和链接器中的安全功能。
/GS(缓冲区安全检查)
此编译器选项指示编译器将溢出检测代码插入到面临被利用风险的函数中。当检测到溢出时,将停止执行。默认情况下,此选项处于打开状态。/SAFESEH(图像具有安全异常处理程序)
此链接器选项指示链接器要包含到输出映像(一个包含各个异常处理程序的地址的表)中。在运行时,操作系统使用此表来确保只执行合法的异常处理程序。这有助于防止执行由运行时恶意攻击引入的异常处理程序。默认情况下,此选项处于禁用状态。/analyze(企业代码分析)
此编译器选项激活代码分析,以报告潜在的安全问题,例如缓冲区溢出、未初始化的内存、null 指针取消引用和内存泄漏等。默认情况下,此选项处于禁用状态。有关更多信息,请参见 C/C++ 代码分析概述。
增强了安全性的 CRT
对于 Visual C++ 2005,已扩充了 C 运行时库 (CRT),以包括面临安全风险的函数的安全版本。(例如,未经检查的 strcpy 字符串复制函数。) 这些函数的早期、不安全版本现已被否决,因此使用它们将导致编译时警告。强烈建议程序员使用这些 CRT 函数的安全版本,而不是取消这些编译警告。有关更多信息,请参见 Security Enhancements in the CRT。
经过检查的迭代器
借助于经过检查的迭代器,标准 C++ 库容器类的用户可在尝试访问容器边界以外的元素时得到通知。有关更多信息,请参见 Checked Iterators。
托管代码的代码分析
托管代码的代码分析,又称 FxCop,是检查程序集与 Microsoft .NET Framework 设计准则的一致性的工具。FxCop 分析各个程序集内的代码和元数据以检查下列领域中的缺陷:
库设计
本地化
命名约定
性能
安全性
托管代码的代码分析包含在 Visual Studio Team System 中,也可从以下地址下载:https://www.gotdotnet.com/team/fxcop/。
Windows 应用程序验证工具
作为应用程序兼容性工具包的一部分,应用程序验证工具 (AppVerifier) 是一种可帮助开发人员标识潜在的应用程序兼容性、稳定性和安全问题的工具。
AppVerifier 的工作方式是:在应用程序运行时,监控操作系统的应用程序的使用情况,包括文件系统、注册表、内存和 API。然后,此工具针对其发现的问题提供源代码级修复指导。
使用此验证工具可以执行下列操作:
检测由常见编程错误导致的潜在应用程序兼容性错误。
检查应用程序是否有与内存相关的问题。
确定应用程序与 Designed for Windows XP 或 Certified for Windows Server™ 2003 徽标计划的各种要求的一致性。
标识应用程序中潜在的安全问题。
Windows 应用程序验证工具在 https://www.microsoft.com/windows/appcompatibility/appverifier.mspx 中提供。
.NET Framework 安全功能
本节概述两个相关的 .NET Framework 安全功能。
Windows 用户帐户
使用属于 Administrators 组的 Windows 用户帐户使开发人员和最终涉及到的客户暴露在安全风险下。有关更多信息,请参见 作为用户组的成员运行。
通过使用 Windows Vista 下的用户帐户控制提高安全性
用户帐户控制 (UAC) 是 Windows Vista 的一项功能,其中用户帐户具有有限的特权。有关更多信息,请参见用户帐户控制 (UAC) 如何影响应用程序。