缓冲区溢出 审查代码是否存在缓冲区溢出时,将审查工作主要放在通过 P/Invoke 或者 COM 互操作层调用非托管代码的代码上。托管代码本身受到缓冲区溢出攻击的可能性很小,因为无论是否访问数组,系统都将自动检查数组边界。只要您调用了 Win32 DLL 或者 COM 对象,都应该严格检查 API 调用。
这些参数是缓冲区溢出的主要来源。检查您的代码,检查所有输入字符串的长度,验证它是否没有超过 API 定义的限制。如果非托管 API 接受字符指针,您可能无法知道最大允许字符串长度,除非有非托管源代码的访问权限。常见缺陷如以下代码片段所示:
void SomeFunction( char *pszInput ) { char szBuffer[10]; // Look out, no length checks. Input is copied straight into the buffer // Should check length or use strncpy. strcpy(szBuffer, pszInput); . . . }