Buffer Overflow(缓冲区溢出),这已经是一个老生常谈的话题了,不仅在软件的制作上回出现这样的问题,其实在网络上也存在这样的问题。更准确的说应该是在有用户输入的地方都存在缓冲区溢出的可能性。那么什么是缓冲区溢出呢?百度是这么说的“计算机程序一般都会使用到一些内存,这些内存或是程序内部使用,或是存放用户的输入数据,这样的内存一般称作缓冲区。溢出是指盛放的东西超出容器容量而溢出来了,在计算机程序中,就是数据使用到了被分配内存空间之外的内存空间。而缓冲区溢出,简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。”
看起来好烦,其实就是:在数据进行操作时没有正确考虑所使用的字符串的长度,使为其分配的空间小于其长度,进而导致占据其他空间所导致的漏洞。这些漏洞往往会引起程序的运行错误(产生一些未知的错误或者结果),同样也可以被攻击者利用进而执行一些自己特定的程序,那么其危险性就不言而喻了。其大致可分为栈缓冲区溢出和堆缓冲溢出。至于栈缓冲溢出和堆缓冲区是怎么回事,