避免缓冲区溢出的多种策略与方法
缓冲区溢出风险示例
在编程中,缓冲区溢出是一个常见且危险的问题。当字符串被截断时,最终结果可能会符合攻击者的预期,而非开发者的本意。以下是一些具体示例:
- 获取主机名时的截断问题 :假设代码调用 gethostbyname(3) 函数,若调用成功,会立即使用 strncpy 或 snprintf 将 hostent->h_name 复制到一个固定大小的缓冲区。虽然使用 strncpy 或 snprintf 可以防止过长的完全限定域名(FQDN)导致溢出,但这可能会截断 FQDN 的末尾部分,这在后续操作中可能会产生不良影响。
- 文件路径复制的风险 :当使用 strncpy 、 strncat 、 snprintf 等函数将文件系统对象的完整路径复制到某个缓冲区时,如果原始值由不可信用户提供,并且复制操作是将计算结果传递给某个函数的一部分,看似安全,但实际上存在风险。攻击者可以在路径开头添加大量的 / ,这可能导致后续操作在 / 文件上执行。或者攻击者设计一个接近缓冲区长度的长文件名,使得追加文件名的尝试可能会无声地失败,或者部分执行,从而被攻击者利用。
静态分配缓冲区的考虑与动态分配的优劣
在使用静态分配的缓冲区时,
超级会员免费看
订阅专栏 解锁全文
794

被折叠的 条评论
为什么被折叠?



