《程序员》9月文章
申明。文章仅代表个人观点,与所在公司无任何联系。
- 概述
在前面的安全编码实践的文章里,我们讨论了GS编译选项,
- 那些是危险的API
2.1历史
在微软产品的安全漏洞中,有很大一部分是由于不正确的使用
微软安全公告 | 涉及产品 | 涉及的函数 |
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动态库函数容易引入安全漏洞,这一点并不奇怪。
2.2 危险API的列表
有关完整的危险API的禁用列表,大家可以参见http:
在这里我们列出其中的一部分,以便大家对那些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 |
有关sprintf的API | ||
wnsprintf, wnsprintfA, wnsprintfW, sprintfW, sprintfA, wsprintf, wsprintfW, wsprintfA, sprintf, swprintf, _stprintf | StringCchPrintf, StringCbPrintf, StringCchPrintfEx, StringCbPrintfEx |
_snprintf_s _snwprintf_s |