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

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

 2008-11-13 19:32:40 来源:WEB开发网   
核心提示: 请注意,这段代码首先使用Parse()方法把输入信息转换成Int32类型,防止Visual C++应用程序缓冲区溢出(4),这种简单的转换可以为很多输入方面的问题进行定位,在这个例子中,其他人可能发送任意长度的字符串,而这样就会导致缓冲区泛滥,代码使用System::OverflowExc

请注意,这段代码首先使用Parse()方法把输入信息转换成Int32类型。这种简单的转换可以为很多输入方面的问题进行定位。在这个例子中,代码使用System::OverflowException异常检查值是否太大或太小,使用System::FormatException异常检查值的格式是否正确。在代码确保输入信息是一个合理的Int32值之后,接着检查实际的输入范围。

值的数据类型是最容易检查的,因为它们都有特定的范围。值与对象不同,它没有隐藏的元素,使开发者感到惊讶的地方很少。

一般来说,用于验证值数据类型的所有事务是在代码中定义上下边界,接着对值进行检查。

当我们使用对象的时候,数据值验证的问题就出现了。例如,你希望用户把几个字符串中的一个作为输入信息,那么使用列表框来减少用户的输入选择是有帮助的。当用户面对只有数个选项的列表框的时候,他们是不可能输入无效信息(例如脚本)的。

有时候你必须为问题设计独特的方案。例如,你如何确保某个特定的方法接收数量固定的、范围不连续的输入信息?在这种情况下枚举(enumeration)可能会节约时间。列表2显示了在代码中如何把枚举用于自动化的数据范围变化。

类表2:使用枚举检查数据的范围

请注意,DisplayString()的声明需要一个SomeStrings枚举类型的输入信息(参数)。调用者不可能使用其它的任何输入类型,这意味着DisplayString()方法自动地受到了保护。例如,你不可能把某个脚本作为输入信息,因为它不是正确的类型。

验证数据的长度

有些数据类型不太容易进行快速检查。例如,字符串可以包含任意数量的字符,其数量最多只受到.NET框架组件和机器的限制。当然,很少人真的需要这么长的字符串。通常开发者要求字符串有一个最小和最大的长度范围。因此,你不需要验证接收到的是否是字符串,只需要验证它的长度是否正确。否则,其他人可能发送任意长度的字符串,而这样就会导致缓冲区泛滥。列表3显示了通过验证每个参数的数据长度来防止发生问题的例子。

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

Tags:防止 Visual 应用程序

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