1.缓冲区溢出
缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。
2.缓冲区溢出攻击
缓冲区溢出攻击溢出攻击是利用缓冲区溢出漏洞所进行的攻击行动。缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统关机、重新启动等后果。利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
3.Windows编程中如何避免缓冲区溢出
微软由于过去对字符串处理函数的缓冲区保护非常薄弱,所以常常会有缓冲区溢出的问题出现,以至于后来有很长一段时间,缓冲区溢出攻击成为Hacker的主流手段。
因此,我们提倡使用安全的字符串处理函数代替:
旧的字符串处理函数 | 新的字符串处理函数 |
---|---|
lstrlen | StringCchLength |
wprintf | StringCchPrintf |
lstrcat | StringCchCat |
lstrcpy | StringCchCopy |
注:使用安全字符串处理函数,需要头文件 strsafe.h