安全编码实践四:C/C++中禁用危险API

 《程序员》9月文章

 

申明。文章仅代表个人观点,与所在公司无任何联系。

  1. 概述

   在前面的安全编码实践的文章里,我们讨论了GS编译选项,数据执行保护DEP功能,以及静态代码分析工具Prefast这里,我们讨论在C/C++代码中禁用危险的API其主要目的是为了减少代码中引入安全漏洞的可能性。

  1. 那些是危险的API
  • 2.1历史

   在微软产品的安全漏洞中,有很大一部分是由于不正确的使用C动态库(C Runtime Library 的函数,特别是有关字符串处理的函数导致的。表一给出了微软若干由于不当使用C动态库函数而导致的安全漏洞【1p242】。 

微软安全公告 涉及产品 涉及的函数
MS02-039 Microsoft SQL Server 2000 sprint
MS05-010 Microsoft License Server lstrcpy
MS04-011 Microsoft Windows (DCPromo) wvsprintf
MS04-011 Microsoft Windows (MSGina) lstrcpy
MS04-031 Microsoft Windows (NetDDE) wcscat
MS03-045 Microsoft Windows (USER) wcscpy

1:不当使用C动态库函数而导致的安全漏洞

   不当使用C动态库函数容易引入安全漏洞,这一点并不奇怪。C动态库函数的设计大约是30年前的事情了。当时,安全方面的考虑并不是设计上需要太多注意的地方。

  • 2.2 危险API的列表


 

   有关完整的危险API的禁用列表,大家可以参见http://msdn.microsoft.com/en-us/library/bb288454.aspx. 

   在这里我们列出其中的一部分,以便大家对那些API被禁用有所体会。 

禁用的API 替代的StrSafe函数 替代的Safe CRT函数
有关字符串拷贝的API
strcpy, wcscpy, _tcscpy, _mbscpy, StrCpy, StrCpyA, StrCpyW, lstrcpy, lstrcpyA, lstrcpyW, strcpyA, strcpyW, _tccpy, _mbccpy StringCchCopy, StringCbCopy,

StringCchCopyEx, StringCbCopyEx

strcpy_s
有关字符串合并的API
strcat, wcscat, _tcscat, _mbscat, StrCat, StrCatA, StrCatW, lstrcat, lstrcatA, lstrcatW, StrCatBuffW, StrCatBuff, StrCatBuffA, StrCatChainW, strcatA, strcatW, _tccat, _mbccat StringCchCat, StringCbCat,

StringCchCatEx, StringCbCatEx

strcat_s
有关sprintfAPI
wnsprintf, wnsprintfA, wnsprintfW, sprintfW, sprintfA, wsprintf, wsprintfW, wsprintfA, sprintf, swprintf, _stprintf StringCchPrintf, StringCbPrintf,

StringCchPrintfEx, StringCbPrintfEx

_snprintf_s

_snwprintf_s

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值