VC++中利用/GS开关防止缓冲区溢出[组图](3)
应用缓冲区保护
只需简单地打开/GS编译器开关,就可启用缓冲区保护。在Visual Studio中,此开关可在"C/C++"选项页的"代码生成"选项中找到(如图2所示)。默认情况下,在Debug配置下为关,而在Release配置下为开。
图2:设置/GS开关
如果用最新版本的编译器进行编译,并生成结构化异常信息,那么在默认情况下,安全结构化异常处理将是打开的,另外,也可以使用/SAFESEH:NO命令行选项来关闭安全结构化异常处理,在Visual Studio的工程设置中,是没办法关闭安全结构化异常处理的,但仍可在链接器中使用此命令行选项来完成。
/GS及更远的安全前景
仅仅是打开一个编译器开关,不会使一个程序彻底变得安全,但在安全漏洞以各种形式出现的今天,它将有助于使程序更加安全。基于堆栈的缓冲区溢出是安全漏洞中的一大类,但随着黑客攻击技术的不断更新,相信它的谢幕,还有一段很长的路要走。
在Microsoft正式的术语中,/GS和SAGESEH均为软件强制的数据执行保护(DEP),软件强制的DEP也能以硬件的方式实现,如在实现了此功能的CPU中,如果数据出现在被标记为"不可执行"的内存页中,将不会执行它。Windows XP SP2及Windows Server 2003现在已支持这些技术,目前市面上的大多数的32位CPU及全部的64位CPU,都支持No Execute(NX)这类安全增强技术。
任何一个好的安全系统,均有多层防范措施应对安全威胁。本文所涉及的编译器开关,它能防范或减少普通编码错误所带来的安全隐患,而且它具有易于使用和低成本的特点,在这场没有硝烟的战争中,不失为一个好的解决方案,绝对值得你的程序采用。
- 上一篇:vc在应用程序中播放声音资源文件
- 下一篇:弹出式菜单