13、避免缓冲区溢出的多种策略与方法

避免缓冲区溢出的多种策略与方法

缓冲区溢出风险示例

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

静态分配缓冲区的考虑与动态分配的优劣

在使用静态分配的缓冲区时,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值