WEB开发网
开发学院软件开发VC 防止Visual C++应用程序缓冲区溢出 阅读

防止Visual C++应用程序缓冲区溢出

 2008-11-13 19:32:40 来源:WEB开发网   
核心提示: 缓冲区溢出证明了一个观点:除非你看着用户与你的应用程序交互操作,否则你根本就不知道用户会向应用程序输入什么样的数据,防止Visual C++应用程序缓冲区溢出(2),这些攻击依赖于一些奇怪的想法:黑客给应用程序提供的输入信息可能超过了缓冲区的长度,结果这些额外的(超出缓冲区长度的)信息覆盖

缓冲区溢出证明了一个观点:除非你看着用户与你的应用程序交互操作,否则你根本就不知道用户会向应用程序输入什么样的数据。这些攻击依赖于一些奇怪的想法:黑客给应用程序提供的输入信息可能超过了缓冲区的长度,结果这些额外的(超出缓冲区长度的)信息覆盖了缓冲区控制之外的内存。在某些情况下,这些内存实际上保存着可执行信息(heap memory overrun,堆存储泛滥),从而使应用程序不运行原始的可执行代码,而是运行黑客的代码;在另外一些情形中,黑客则覆盖了应用程序的栈页面(stack memory overrun,栈存储泛滥)。

有些黑客甚至于分析你的代码,查找位置以供堆或栈存储泛滥利用。但是在有些情况下,当黑客试图向某个字段输入一些信息,查看发生什么情况的时候,这种利用可能被发现。例如,黑客可能试图输入一段简单的代码,看你的应用程序是否会执行它。不管该黑客是如何发现漏洞的,其结果都是相同的:你的应用程序失去了对黑客代码的控制权--黑客现在可以享受那些曾经是你的应用程序才能享受的权力了。

很多开发者认为黑客会通过某些秘密的通道来利用他们所建立的程序,但是很多利用方法是非常简单的--让操作系统显示命令提示符这样的行为在某些情况下就足以获取控制权了。如果系统的安全性稍微有一点松懈,黑客就可以获取服务器的控制权。至少,命令提示符允许黑客探测系统的状况,采用其它的某种方式来获取更多的访问权。黑客不需要在第一次尝试的时候就获得系统的控制权。他们所需要的是获取累积起来的点点滴滴的控制权。

很明显,如果要保证应用程序免受缓冲区泛滥的伤害,你就必须为应用程序提供某种保护措施。控制缓冲区泛滥的最好的方法是检查程序收到的所有输入信息,即使这些信息来自受信任的来源。本文考虑了每个程序应该执行的四个基本的检查:检查数据范围、验证数据长度、排除非法字符、为用户提供足够的帮助以确保良好的输入。

上一页  1 2 3 4 5 6 7  下一页

Tags:防止 Visual 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接