
c语言(以及C++)的广泛使川与缓冲区滋出有密切的关系.重要原因就在于c语言不提供自动的缓冲区边界检查。事实上现在流行的绝人多数编程语言都有自动的缓冲区边界检查机制,这种检查在一定程度上影响了程序的执行效率。当比较安全的语言能够很好地满足需求的时候.可以考虑用它们作为主要开发语言。
从前面的讨论中还可以看到,人最的缓冲区滋出漏洞都是因为使用strcpy函数而造成的,标准C提供了atrn函数族,但是很多研究都指出了其安全性的不足。同样的问题也存

编译器、C库或者操作系统还可以提供栈和堆的缓冲区滋出保护.以栈滋出为例.这种保护基于函数返回时对栈的完整性检查.在栈上放入合适的标志(canary).当函数返回检查时.如果这些标志发生了改变则认为有缓冲区滋出发生.这种方法在Linux和Wind,下都有应用.如Linux下的libsafe. gcc的StackCuard和ProPolice补一J‘.或者Windows F的DEP机制(Software Data Execution Prevention.在无硬件执行保护时检古ST IE折针的正确性)。

当处理器试图在这些页上执行代码时会产生缺贞异常。山操作系统处理。由于这种执行保护延基于页(而不是以前的段),使得保护堆找成为可能。各种常见的操作系统己经开始逐渐加入NX/XD的支持.如Window,的DEP.然而.在较老的操作系统或者不支持NX/XD的处理器上.这种保护不能起到作用。硬件保护极大地提高了数据区的安全性.

重的作用,ASIA则通过随机性使这种预测变得更加困难。
对于网络攻击来说,还可以采用深度分组检查的方法。防火墙对所有的分组进行检查.通过特征搜索枪查可能的攻击分组,如前面提到的长串trop指令等.

健壮的代码.才能更好地减少潜在的缓冲区滋出攻击。