跳到主要内容

缓冲区溢出漏洞

概述

包括网络应用程序在内的所有程序,为执行指定处理而在内存中分配自身使用的区域。如果程序不能正确处理输入数据,则可能会覆盖程序分配的内存区域,超出内存范围,从而导致执行意外代码的风险。这种问题称为"缓冲区溢出漏洞",而利用此问题的攻击称为"缓冲区溢出攻击"。

可能出现的威胁

由于缓冲区溢出,可能出现的威胁如下:

程序异常终止 • 无意中停止的服务任意代码执行 • 感染病毒、蠕虫、恶意软件、设置后门、攻击其他系统、泄露重要信息等

需要注意的网站特征

缓冲区溢出通常在使用C、C++、汇编语言等可以直接操作内存的语言编写的程序中发生。因此,需要注意使用使用这些语言开发的Web应用程序的网站。目前,大多数Web应用程序使用不能直接操作内存的语言,如PHP、Perl、Java等,因此受缓冲区溢出漏洞影响的可能性较低。但是,PHP、Perl、Java库中存在缓冲区溢出漏洞。

根本解决方案

  • 使用不能直接访问内存的语言编写。

通过使用不能直接操作内存的语言编写Web应用程序,可以防止出现缓冲区溢出漏洞。目前,大多数Web应用程序都是使用不能直接操作内存的语言(如PHP、Perl、Java等)编写的,因此使用这些语言编写的Web应用程序不会出现缓冲区溢出问题。

  • 最小化使用能直接访问内存的语言编写。

如果在程序内部调用使用C、C++、汇编语言等可以直接操作内存的语言编写的自己的程序,则被调用程序可能存在缓冲区溢出漏洞。因此,需要将使用可以直接访问内存的语言编写的部分最小化,并集中检查该部分是否存在缓冲区溢出漏洞。

  • 使用已修复漏洞的库版本。

通常情况下,如果使用通常流通的库,则旧版本可能存在缓冲区溢出漏洞,因此,请使用已修复漏洞的版本。